[Java] ActionListener die waarde opvraagd

Pagina: 1
Acties:

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik ben inmiddels een stuk verder zeker met behulp van mijn boek, en natuurlijk de javadocs, maar ik kan iets niet vinden.

Ik heb een Jdialog, wat het doet is niet belangrijk. Hierin staan 2 buttons. Nu wil ik dat als 1 van die buttons is ingedrukt er een waarde word opgeslagen en de Jdialog word gesloten. Het sluiten is geen probleem. Maar het probleem zit hierin.

Ik heb een class programma, daarin roep ik een menubar aan. De standaard menubar. In die menubar heb ik een aanroeping naar die Jdialog. Nu wil ik die waarde van dat Jdialog onthouden en die moet teruggegeven worden naa de menubar/programma. Met die waarde wil ik namelijk de menubar repainten (dus waardes toevoegen/verwijderen).

Dat repainten is het probleem niet. Alleen heb ik met 3 classes te maken en die zitten allemaal in verschillende files. Kan iemand me op weg helpen. Want ik heb gelezen dat het met een actionlistener kan. Door eerst het Jdialog aan te roepen en daaron dus die actionlistener te schrijven voor de opgeslagen data.

Maar nu de 2 problemen. Hoe krijg ik die data "opgeslagen' en hoe krijg ik dit in de programma class?

Verwijderd

Ik heb een vaag idee van wat je wil en geen idee van wat je hebt geprobeerd.
Post even wat van je code. Gebruik je MenuBar of JMenuBar?
Heb je eventueel ook een stukje klassendiagram?

  • r5d
  • Registratie: Februari 2002
  • Niet online

r5d

Read more, write less...

Zoals Tzar al zegt het is een beetje onduidelijk, probeer eens duidelijk te omschrijven wat nu precies niet lukt.

Btw, wat bedoel je met "Ik heb een class programma..." :?

Later betaal je meer, maar dan heb je wel een gratis datalimiet....


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:29

Robtimus

me Robtimus no like you

  • Je maakt die menubar etc public, zodat de JDialog er gewoon access toe heeft. Nadeel: elke OO programmeur slaat je dood })
  • De parent frame implementeert ActionListener, en wordt aan de knop doorgegeven. Je moet de JDialog toch initialiseren met een JFrame (of Dialog), dus die geef je toch al door. Nadeel: je frame kan maar 1 event hebben tenzij je de controls van je dialog public maakt. In dat geval telt het nadeel van het eerste punt weer.
  • public method in de main class aanmaken die je aanroept in de action listener van je dialog. Voordelen: je kan meerdere events hebben.
Zomaar eventjes 3 oplossingen. Ik ga meestal (lees: zo goed als altijd ;)) voor de derde.

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


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
IceManX schreef op 29 oktober 2004 @ 10:42:
  • Je maakt die menubar etc public, zodat de JDialog er gewoon access toe heeft. Nadeel: elke OO programmeur slaat je dood })
  • De parent frame implementeert ActionListener, en wordt aan de knop doorgegeven. Je moet de JDialog toch initialiseren met een JFrame (of Dialog), dus die geef je toch al door. Nadeel: je frame kan maar 1 event hebben tenzij je de controls van je dialog public maakt. In dat geval telt het nadeel van het eerste punt weer.
  • public method in de main class aanmaken die je aanroept in de action listener van je dialog. Voordelen: je kan meerdere events hebben.
Zomaar eventjes 3 oplossingen. Ik ga meestal (lees: zo goed als altijd ;)) voor de derde.
Is er van die derde manier ook ergen een tutorial te vinden? Want dan ben ik wel benieuwd. Ik wil het graag op de goede manier leren.

Verwijderd

Het is vrij basic. Als je een public methode in class A maakt, kun je die vanaf class B aanroepen.
Of begrijp ik nu nog niet zo goed wat de vraag is?

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Verwijderd schreef op 29 oktober 2004 @ 12:22:
Het is vrij basic. Als je een public methode in class A maakt, kun je die vanaf class B aanroepen.
Of begrijp ik nu nog niet zo goed wat de vraag is?
Kort gezegd, ik heb in mijn frame een menubar en die wil ik gaarg updaten, afhankelijk van de JDialog.

Mijn frame laad een class met een method menubar+actiolistener -> wat word geselecteerd in de menubar

Als er een opties word geselcteerd opent een JDialog, deze method staat in een aparte class. Als daar op ok word gedrukt moet een voorgedefinieerde waarde terugkomen naar het hoofdframe waar de menubar deel van uit makat en deze worden gerenewed. Dit zou kunnen door remove en dan opnieuw toevoegen of iets dergelijks, maar dat maakt niet uit, daar kom ik wle uit. Het gaat erom dat ik die variabele naar mijn hoofdframe krijg.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:29

Robtimus

me Robtimus no like you

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyFrame extends JFrame
{
    public void doIt(...)
    {
        "doe iets met je menubar"; // bv menubar.doThat(...);
        ....
    }
}

public class MyDialog extends JDialog
{
    private MyFrame parent;

    public MyDialog(MyFrame parent, ...)
    {
        this.parent = parent;
        ...
    }
}
De MyDialog creeer je dan vanuit de MyFrame met new MyDialog(this, ...).
In die actionlistener binnenin die MyDialog ergens roep je parent.doIt(...) aan.
Isse simpel! ;)

Als het alleen variabelen zetten betreft moet je maar eens naar getters en setters kijken.

[ Voor 4% gewijzigd door Robtimus op 29-10-2004 12:51 ]

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


Verwijderd

Zet in de eerste regel van je constructor van MyDialog even de tekst: super(parent);
Anders is de Dialog nog niet gebonden aan het JFrame (qua look and feel dan).

Verder klopt het inderdaad. In feite maak je in OO al je attributen private, en als je er van extern bij wil komen, dan maak je get en set-methoden aan.
Java:
1
2
3
4
5
6
7
8
9
private String tekst;

setText(String tekst){
  this.tekst = tekst;
}

getText(){
  return tekst;
}


Wel zou ik op een gegeven moment kjiken naar JMenuBar. Daar je ook JDialog gebruikt, kun je beter alles in swing gebruiken. AWT en Swing mixen wil nog wel eens vreemde dingen opleveren.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:29

Robtimus

me Robtimus no like you

Verwijderd schreef op 29 oktober 2004 @ 13:49:
Zet in de eerste regel van je constructor van MyDialog even de tekst: super(parent);
Anders is de Dialog nog niet gebonden aan het JFrame (qua look and feel dan).
oeps ;)
Krijg je als je ff snel wat opschrijft.

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


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
IceManX schreef op 29 oktober 2004 @ 12:50:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyFrame extends JFrame
{
    public void doIt(...)
    {
        "doe iets met je menubar"; // bv menubar.doThat(...);
        ....
    }
}

public class MyDialog extends JDialog
{
    private MyFrame parent;

    public MyDialog(MyFrame parent, ...)
    {
        this.parent = parent;
        ...
    }
}
De MyDialog creeer je dan vanuit de MyFrame met new MyDialog(this, ...).
In die actionlistener binnenin die MyDialog ergens roep je parent.doIt(...) aan.
Isse simpel! ;)

Als het alleen variabelen zetten betreft moet je maar eens naar getters en setters kijken.
Waarom schrijf je dit in een constructor? Je maakt dus een constructor met daaronder een actionlistener, of mis ik nu iets?

Btw. Ben er weer was even door andere redenen weg.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
IceManX schreef op 29 oktober 2004 @ 14:16:
[...]
oeps ;)
Krijg je als je ff snel wat opschrijft.
Top, ik ben nu even die tijd aan het proberen geweest en het werkt perfect. Precies wat ik nodig heb.

Voor toekomstige dingen zal ik ook is naar MVC gaan kijken. Maar dit doet voor nu precies wat ik wil.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:29

Robtimus

me Robtimus no like you

BSeB schreef op 02 november 2004 @ 08:47:
[...]


Waarom schrijf je dit in een constructor? Je maakt dus een constructor met daaronder een actionlistener, of mis ik nu iets?
De actionlistener gebruik je binnenin de MyDialog class, niet per se de constructor. Daarom is parent ook een field geworden.

Ik doe het zelf wel vaak in de constructor, omdat daar alle overige initialisaties plaatsvinden.

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

Pagina: 1