14. september 2004 - 09:30Der er
9 kommentarer og 2 løsninger
Skal tilknytte en gui til en JMenu
Har lavet en JMenu med undermenuer, men mit problem er at når man klikker på en undermenu i menubar, skal den åbne en anden gui nedenunder menubar, hvordan gør man det?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Slettet bruger
14. september 2004 - 16:36#1
Jeg ville så lave en løsning med koble et CardLayout op imod de Actions som bliver "fired" når et menu-punkt bliver valgt. De forskellige GUI skulle så være placeret i flere JPanels som CardLayout'et ville skifte imellem.
Du skal faktisk bruge begge dele. Componenterne du allerede har på din JFrame, skal du ligge over i et JPanel, det skal du så tilføje til dig CardLayout. Du laver derefter et nyt JPanel hvor det indeholder andre components for det ui du vil vise for et nyt menupunkt. Til sidst knytter du så CardLayout'et til din JFrame.
Jeg håber jeg gør mig selv forståelig, ellers må du lige smide noget kode så jeg kan komme med et forslag.
Jeg prøver at forstå!! Min guier der skal bindes til (HovedMenu) er alle lavet i JPanel i layout nullLayout. Hovedmenuen med JMenubar, JMenu og JMenuItem er lavet i JFrame i layout BorderLayout. Hvad mener du?? Har du evt. et eksempel (kode), jeg kan kun finde noget hvor man opretter en menu men ikke noget om at binde JMenuItem med en anden gui
Synes godt om
Slettet bruger
14. september 2004 - 21:24#5
ok, på hvert dine JMenuItems kan du binde en ActionListener (som lytter på hver gang der bliver klikket, eller valgt et menuitem), dette vil se således ud:
mitMenuItem.addActionListener(new ActionListener() { public void ActionPerformed(ActionEvent ae) { // Skriv kode der skal udføres hver gang menupunktet bliver valgt, HER!!! } }
JMenu tilføjes til JFrame med metoden:
setJMenuBar(minJMenuBar);
På din contentPane (i din JFrame), sætter du så et CardLayout:
CardLayout card = new CardLayout(); Container pane = getContentPane(); pane.setLayout(card); // Så tilføjer vi nogle Panels, kan være de panels du allerede har lavet... JPanel greenPanel = new JPanel(); pane.add(greenPanel, "Det grønne panel"); JPanel bluePanel = new JPanel(); pane.add(bluePanel, "Det blå panel");
Når du så vil skifte til at vise et panel skriver du blot:
card.show(pane, "Det grønne panel"); // for at vise greenPanel card.show(pane, "Det blå panel"); // for at vise bluePanel
Jeg håber det giver lidt mere mening nu... ellers, poster det kode du allerede har, og så vil jeg gerne se om jeg kan tilpasse noget til dig, du burde dog ha' redskaberne til at stykke det sammen nu.
Jeg lavede lige selv et eksempel jeg har fået til at fungere, håber du kan bruge det til noget, jeg skal desværre på arbejde nu, men skal nok se om jeg ikke kan få din kode til at fungere engang når jeg kommer hjem i aften.
public class CardLayoutTest extends JFrame implements ActionListener { public static void main(String[] args) { CardLayoutTest test = new CardLayoutTest(); test.show(); }
private void setupMenu() { JMenuBar menu = new JMenuBar(); setJMenuBar(menu);
menuGreen = new JMenuItem("Green"); menuGreen.addActionListener(this); menuBlue = new JMenuItem("Blue"); menuBlue.addActionListener(this); menuRed = new JMenuItem("Red"); menuRed.addActionListener(this); menuYellow = new JMenuItem("Yellow"); menuYellow.addActionListener(this);
JMenu colors = new JMenu("Colors"); colors.add(menuGreen); colors.add(menuBlue); colors.add(menuRed); colors.add(menuYellow);
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.