[JAVA] Jmenubar invullen met enum

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DenDries
  • Registratie: Januari 2006
  • Laatst online: 12-10 13:25
Hallo,

Voor school hebben we de opdracht gekregen om een klantenbeheertool te maken met een JMenuBar die wordt aangevuld door enum.

Ik gebruik onderstaande code om het enum uit te lezen en elk element in het menu toe te voegen. Dit werkt zoals het hoort.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public enum Menu { INVOEREN, LEZEN, WIJZIGEN, BACKUP, EXIT}
public Databank()
    {   
        // GUI aanmaken.
        final JFrame f = new JFrame("Examentaak");
        f.setLayout(new GridLayout(2, 1));
        f.setMinimumSize(new Dimension(600,400));
        
        final JMenuBar menuBar;
            final JMenu gegevensmenu;       
        
        // Menu aanmaken.
        menuBar = new JMenuBar();
                gegevensmenu = new JMenu("Gegevens");
                
        for (Menu m : Menu.values())
            gegevensmenu.add(new JMenuItem(m.toString()));

        menuBar.add(gegevensmenu);
        f.setJMenuBar(menuBar);


Probleem is dat ik niet weet hoe ik de acties kan laten uitvoeren bij de juiste keuze.

Bijvoorbeeld voor 'EXIT', hoe kan ik de actionlistener aanspreken?
code:
1
2
3
4
5
        ????.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });


Ik dacht dus nadien om een switch te gebruiken, echter werkt het langs geen kanten:

code:
1
2
3
4
5
6
7
8
switch(Menu.valueOf(menuBar.getComponent().toString())){
                case INVOEREN:
                    System.out.println("u heeft gekozen voor de gegevens in te voeren.");
                    break;
                case LEZEN:
                    System.out.println("u heeft gekozen voor de gegevens lezen.");
                    break;
            }


Weet er iemand wat ik zou kunnen proberen? En welke oplossing er mits aanpassing zou werken?

[ Voor 6% gewijzigd door DenDries op 09-01-2011 15:42 ]


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 23:47
Het item opvragen met getItem() en daarna je actionlistener adden? :)

Dit kan ook weer met een leuk for-loopje.

[ Voor 24% gewijzigd door Avalaxy op 09-01-2011 15:50 ]


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 14-10 02:10

Nick_S

++?????++ Out of Cheese Error

Je zou je acties aan je enum kunnen hangen.

Java:
1
2
3
4
5
6
7
8
9
public enum Menu { 
INVOEREN {
 public void action(ActionEvent e) {
    //doeIets...
 }
}

public abstract void action(ActionEvent e);
}


En daarna in je andere klasse.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        for (Menu m : Menu.values()) {
            JMenuItem item = new JMenuItem(m.toString())
            item.addActionListener(new ActionListener(m) {
                        private Menu menu;
                        ActionListener(Menu menu) {
                            this.menu = menu;
                        }

                   public void actionPerformed(ActionEvent event) {
                         menu.action(event);
                   }
        });

            gegevensmenu.add(item);
        }

Even snel uit m'n hoofd, maar volgens mij werkt het wel.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • DenDries
  • Registratie: Januari 2006
  • Laatst online: 12-10 13:25
Allebei heel erg bedankt, ik lijk er stilaan uit te komen :)