[java] event doorgeven aan ander panel

Pagina: 1
Acties:

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Topicstarter
Ik ben bezig met het schrijven van een applicatie in java, althans dat probeer ik :P
Het lukt wel aardig al zeg ik het zelf, ik zit nu alleen met een klein probleempje. Ik heb op panel A een knopje staan, en als daar op geklikt wordt moeten op panel B een aantal tekstvelden gevuld worden.
Nu is mijn vraag hoe ik dat het beste kan doen. Een oplossing is om panel B een actionlistener aan dat knopje op panel A te laten hangen, ik vraag me alleen af of dat wel zo netjes is.
Ik ben natuurlijk niet de enige die zo'n soort applicatie maakt, want er zijn er tallozen die met een splitpane werken. Dus hoe pak je zoiets aan?

.edit: misschien handig om te vermelden dat de panels ieder in een eigen klasse ondergebracht zijn.

[ Voor 9% gewijzigd door NetForce1 op 19-02-2004 21:06 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Public method in B die je in de actionlistener in A aanroept?

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class B extends JPanel
{
    public void doIt(....) { ... }
}

public class A extends JPanel
{
    public A(B b)
    {
        final B b1 = b; // zodat je hem in je anonieme actionlistener kan gebruiken
        JButton button = new JButton(...);
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                b1.doIt(....);
            }
        });
    }
}
(ja ik weet het, de code is niet netjes, maar het is gewoon een voorbeeld)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Topicstarter
dat kan ook ja, dan kun je er ook gelijk voor zorgen dat A zelf nog iets doet voordat B aant werk gezet wordt. Stom dat ik daar zelf niet opkwam 8)7

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 15-05 15:27
Je kan ook opgeven dat knop op A de actionListener van B moet gebruiken

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class B extends JPanel implements ActionListener{
  public void actionPerformed( ActionEvent e ){
    if( e.getActionCommand().equals( "KNOP_A_EVENT" ){
       //hier de velden instellen
    }
  }
}

public class A extends JPanel{
  JButton button = new JButton( "gekke tekst" );
  button.addActionListener( b ); //b is instantie van klasse B
  button.setActionCommand( "KNOP_A_EVENT" );
}

Wat netter imho

[ Voor 6% gewijzigd door Donderwolk op 20-02-2004 10:25 ]

Pwnd


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

1 actie op deze manier aansluiten kan meestal geen kwaad (kuch kuch), als je dit meer gaat doen zijn alle componenten aan elkaar verbonden en krijg je een dikke brei code.

Je zou eventueel een object dat je aan al je schermen meegeeft, kunnen maken: een Mediator. Als er dan iets op scherm A gebeurt dan geeft ie dat door aan de meditor en hij zorgt ervoor dat de rest van de schermen weer up to date blijven. Op deze manier hou je alle complexiteit dus in 1 object.

Eventueel kan je werken met een Model View Controler. Er staan genoeg topics over MVC dus die moet je maar even opzoeken.