Avatar billede kobojt Nybegynder
26. januar 2000 - 13:12 Der er 8 kommentarer og
1 løsning

Handling MenuItem Events

Hi !

I have a set of menus who's menuitem events I'd like to be able to handle. For instance in the "View"- menu, the user clicks a menuitem and the contents of the frame changes. How do I make this happen ? I have looked in the tutorials but wasn't able to find much help.
Avatar billede gnarf Nybegynder
26. januar 2000 - 21:36 #1
You have to add a MenuItem listener to your MenuItem. The listener will then be registered to handle events coming from that MenuItem.
The principle is as follows, but I didn't bother to check the exact method names and so on. You should be able to figure it out. If not please respond with what your problem is and I'll help again. I'm just a little in a hurry now :)

MenuItem view = new MenuItem();
viewListener listener = new viewListener();
view.addMenuItemListener(listener);

class viewListener implements MenuItemListener {
  public void itemSelected() {
    //change contents of frame here
  }
}
Avatar billede kobojt Nybegynder
27. januar 2000 - 12:45 #2
Hi gnarf
Efter dit svar har jeg læst op på events, men kan stadig ikke finde ud af hvordan jeg skal ændre indholdet af min frame
Avatar billede gnarf Nybegynder
28. januar 2000 - 11:45 #3
Har du ikke et kodeeksempel ???
Avatar billede kobojt Nybegynder
28. januar 2000 - 13:01 #4
Hi gnarf

Det er meningen at programmet skal kalde klassen Kunde eller Rapport.
Inde i de klasser er der defineret hvordan indholdet skal stå i framen.
Koden nedefor er fra den klasse der via menuerne skal kalde. Ligenu koncentrer jeg mig kun om menuen "Vis".

import java.awt.*;

class RepAdmin extends Frame
{
    RepAdmin()
    {
        super("RepAdmin test ver 1.0");
        MenuBar mbar = new MenuBar();
        window.setSize(640, 480);
        window.setVisible(true);
       
        window.setMenuBar(mbar);
       
        //de tre menuer
        Menu theMenu = new Menu("Filer");
        Menu anotherMenu = new Menu("Vis");
        Menu helpMenu = new Menu("Help");
       
        mbar.add(theMenu);
        mbar.add(anotherMenu);
        mbar.add(helpMenu);
        mbar.setHelpMenu(helpMenu);
       
        //menupunkter for filer
        Menu sub1 = new Menu("Opret");
        theMenu.add(sub1);
        MenuItem opretKunde = new MenuItem("Kunde");
        MenuItem opretRapport = new MenuItem("Rapport");
        sub1.add(opretKunde);
        sub1.add(opretRapport);
       
        MenuItem filerGem = new MenuItem("Gem");
        MenuItem seperator = new MenuItem("-");
        MenuItem filerUdskriv = new MenuItem("Udskriv");
        MenuItem filerAfslut = new MenuItem("Afslut");
           
        theMenu.add(filerGem);
        theMenu.add(seperator);
        theMenu.add(filerUdskriv);
        theMenu.add(seperator);
        theMenu.add(filerAfslut);
        theMenu.add(OpenItem);
       
        //menupunkter for vis
        MenuItem visKunde = new MenuItem("Kunde");
        MenuItem visRapport =new MenuItem("Rapport");
       
        anotherMenu.add(visKunde);
        anotherMenu.add(visRapport);
        anotherMenu.add(OpenItem);
       
        visKunde.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                changeTheFrame();
            }
        });
        visRapport.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                changeTheFrame();
            }
        });
           
        //menupunkter for help
        MenuItem helpAbout = new MenuItem("About");
        helpMenu.add(helpAbout);
        helpMenu.add(OpenItem);
       
        public void changeTheFrame()
        {
           
        }
    }
       
    public static void main(String args[])
    {
        Frame window = new Rapport();
    }             
}
Avatar billede gnarf Nybegynder
31. januar 2000 - 13:08 #5
Heh...ja den kode her er jo fin nok. Men den viser desværre ikke hvad du viser i framen fra start af, og heller ikke hvad du planlægger at vise senere hen.

Altså f.eks. i constructoren for RepAdmin tilføjes
panel1 = new Panel();
this.add(panel1, BorderLayout.CENTER);

og hvis du så vil skifte panel1 ud med noget andet:

public void changeTheFrame() {
  this.add(panel2, BorderLayout.CENTER);
  this.update(this.getGraphics);
}

Her udskifter jeg så bare komponenten som er midt i et BorderLayout man kunne også lave en remove(Component) efterfulgt af en add(component)
Avatar billede kobojt Nybegynder
01. februar 2000 - 15:19 #6
Hvad hvis jeg vil skifte objektet i constructoren istedet ?

Kobojt
Avatar billede gnarf Nybegynder
01. februar 2000 - 15:26 #7
Constructoren bliver jo kun kaldt når objektet oprettes. Så det du indsætter i constructoren er det som programmet skal starte op med. Kald det en initialiseringsværdi, om du vil.

Det jeg gjorde i eksemplet var at udskifte hvad der nu er i midten af "window" med panel2 når metoden changeTheFrame bliver kaldt.
Avatar billede kobojt Nybegynder
01. februar 2000 - 16:45 #8
Hmm, du har vist gjrot dig mere end fortjent til dine points.

Thanx

Kobojt
Avatar billede gnarf Nybegynder
02. februar 2000 - 08:46 #9
Ikke hvis du ikke har fået løst dit problem....men ok.
Du kan bare spørge videre her hvis du synes....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester