26. januar 2000 - 13:12Der 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.
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 } }
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");
//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");
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)
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.
Ikke hvis du ikke har fået løst dit problem....men ok. Du kan bare spørge videre her hvis du synes....
Synes godt om
Ny brugerNybegynder
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.