Avatar billede napisok Nybegynder
14. september 2004 - 09:30 Der 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?
Avatar billede 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.
Avatar billede napisok Nybegynder
14. september 2004 - 18:36 #2
Jeg har brugt BorderLayout, prøver CardLayout
Avatar billede Slettet bruger
14. september 2004 - 19:17 #3
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.
Avatar billede napisok Nybegynder
14. september 2004 - 19:49 #4
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
Avatar billede 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.
Avatar billede napisok Nybegynder
14. september 2004 - 21:32 #6
Det ser ud til at være en stor hjælp, prøver det og melder tilbage i morgen
Avatar billede Slettet bruger
14. september 2004 - 21:36 #7
bare iorden, held og lykke...og, nå ja... sov godt :-)
Avatar billede napisok Nybegynder
15. september 2004 - 14:25 #8
Hvad går der galt?? (er på linjen igen i aften, kl. 21.30. Dette kode kalder min Jpanels

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HovedEks extends JFrame implements ActionListener{
    private JMenuBar menuB=new JMenuBar();
        private JMenu fileH=new JMenu("Filer");
            private JMenuItem udskrivI=new JMenuItem("Udskriv",'u');
            private JMenuItem exitI=new JMenuItem("Exit",'x');
    private JMenu vareH=new JMenu("Vare");
            private JMenuItem vareI=new JMenuItem("Varehylde",'a');
    private JMenu kundeH=new JMenu("Kunde");
            private JMenuItem kundeI=new JMenuItem("KundeKartotek",'n');
    private JMenu helpH=new JMenu("Hjælp");
            private JMenuItem hvemI=new JMenuItem("Hvem er vi",'i');
            private JMenuItem jegI=new JMenuItem("Her er jeg", 'j');
    private VareGUI vg; //JPanel
    private KundeGUI kg; //JPanel
    private SalgGUI sg; //Jpanel
   
    private BorderLayout bl1=new BorderLayout();
    private CardLayout card=new CardLayout();
    private Container pane=getContentPane();
   
    public HovedEks(VareGUI vg, KundeGUI kg, SalgGUI sg){
       
        super("Skoshop");
       
        this.vg=vg;
        this.kg=kg;
        this.sg=sg;
               
      pane.setLayout(card);
        pane.add(sg,"SalgMenu");
        pane.add(vg,"VareMenu");
        pane.add(kg,"KundeMenu");
   
        menuB.add(fileH);
        fileH.setMnemonic( 'f' );
            fileH.add(udskrivI);
            fileH.add(exitI);
                       
        menuB.add(vareH);
            vareH.setMnemonic( 'a' );
            vareH.add(vareI);
            vareI.addActionListener(this);
                             
        menuB.add(kundeH);
            kundeH.setMnemonic('u');
            kundeH.add(kundeI);
            kundeI.add(kg);
           
        menuB.add(helpH);
            helpH.setMnemonic('h');
            helpH.add(hvemI);
            helpH.add(jegI);   
           
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);           
            setVisible(true);           
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==vareI){
            card.show(pane,"VareMenu");
       
       
        }
    }
    public static void main(String[]args){
       
        VareGUI vgu=new VareGUI();
        KundeGUI kgu=new KundeGUI();
        SalgGUI sgu=new SalgGUI();
        HovedMenuIT hit=new HovedMenuIT(vgu, kgu,sgu);
    }
}
Avatar billede Slettet bruger
16. september 2004 - 10:59 #9
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.

// ---------- Min kode ----------

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class CardLayoutTest extends JFrame implements ActionListener {
    public static void main(String[] args) {
        CardLayoutTest test = new CardLayoutTest();
        test.show();
    }
   
    private Container pane;
   
    private JMenuItem menuGreen;
    private JMenuItem menuBlue;
    private JMenuItem menuRed;
    private JMenuItem menuYellow;
   
    private CardLayout card;
    private JPanel greenPanel;
    private JPanel bluePanel;
    private JPanel redPanel;
    private JPanel yellowPanel;
   
    public CardLayoutTest() {
        setupPanels();       
        setupMenu();
       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(640, 480);
    }

    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);
       
        menu.add(colors);
    }

    private void setupPanels() {
        pane = getContentPane();
        pane.setLayout(card = new CardLayout());
        pane.add(greenPanel = createColorPanel(Color.green), "GREEN");
        pane.add(bluePanel = createColorPanel(Color.blue), "BLUE");
        pane.add(redPanel = createColorPanel(Color.red), "RED");
        pane.add(yellowPanel = createColorPanel(Color.yellow), "YELLOW");
    }
   
    private JPanel createColorPanel(Color color) {
        JPanel toReturn = new JPanel();
        toReturn.setOpaque(true);
        toReturn.setBackground(color);
        return toReturn;
    }
   
    public void actionPerformed(ActionEvent ae) {
        Object source = ae.getSource();
       
        if (source == menuGreen) {
            card.show(pane, "GREEN");
        } else if (source == menuBlue) {
            card.show(pane, "BLUE");
        } else if (source == menuRed) {
            card.show(pane, "RED");
        } else if (source == menuYellow) {
            card.show(pane, "YELLOW");
        }
       
    }
}
Avatar billede napisok Nybegynder
16. september 2004 - 17:47 #10
Jeg fik det til at virke, men problemet at når jeg klikker på KundeGUI forsvinder alle JMenuItem og kan ikke finde fejlen

HovedmenuGUI:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
public class HovedMenuIT extends JFrame implements ActionListener{
    private JMenuBar menuB=new JMenuBar();
    private JMenu fileH=new JMenu("Filer");
            private JMenuItem udskrivI=new JMenuItem("Udskriv",'u');
            private JMenuItem exitI=new JMenuItem("Exit",'x');
    private JMenu vareH=new JMenu("Vare");
            private JMenuItem vareI=new JMenuItem("Varehylde",'a');
    private JMenu kundeH=new JMenu("Kunde");
            private JMenuItem kundeI=new JMenuItem("KundeKartotek",'n');
    private JMenu helpH=new JMenu("Hjælp");
            private JMenuItem hvemI=new JMenuItem("Hvem er vi",'i');
            private JMenuItem jegI=new JMenuItem("Her er jeg", 'j');
    private VareGUI vg;
    private KundeGUI kg;
    private SalgGUI sg;
        private BorderLayout bl1=new BorderLayout();
        private CardLayout cl=new CardLayout();
    public HovedMenuIT(VareGUI vg, KundeGUI kg, SalgGUI sg){
        super("Skoshop");
        this.vg=vg;
        this.kg=kg;
        this.sg=sg;
        setSize(1024,768);
        setJMenuBar(menuB);
    Container pane = getContentPane();
    pane.setLayout(cl);
    pane.add(vg,"VareMenu");
    pane.add(kg,"KundeMenu");
        menuB.add(fileH);
        fileH.setMnemonic( 'f' );
            fileH.add(udskrivI);
            fileH.add(exitI);
            exitI.addActionListener(this);
        menuB.add(vareH);
            vareH.setMnemonic( 'a' );
            vareH.add(vareI);
            vareI.addActionListener(this);
        menuB.add(kundeH);
            kundeH.setMnemonic('u');
            kundeH.add(kundeI);
          kundeI.addActionListener( this);         
        menuB.add(helpH);
            helpH.setMnemonic('h');
            helpH.add(hvemI);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==vareI){
            cl.show(getContentPane(),"VareMenu");              }
        if(e.getSource()==kundeI){
            cl.show(getContentPane(),"KundeMenu");      }
        if(e.getSource()==exitI){
            System.exit(0);        }    }
    public static void main(String[]args){
        VareGUI vgu=new VareGUI();
        KundeGUI kgu=new KundeGUI();
        SalgGUI sgu=new SalgGUI();
        HovedMenuIT hit=new HovedMenuIT(vgu, kgu,sgu);  }}
KundeGUI
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class KundeGUI extends Panel implements ActionListener{
        private JLabel LmailK = new JLabel("Email");
        private JLabel LmobilK = new JLabel("Mobilnr");
        private JLabel LbyK = new JLabel("By");
        private JLabel LpostnrK = new JLabel("Postnr");
        private JLabel LadresseK = new JLabel("Adresse");
        private JLabel LnavnK = new JLabel("Navn");
        private JLabel LtlfK = new JLabel("Tlf/ID");
        private JTextField TmailK = new JTextField(40);
        private JTextField TmobilK = new JTextField(40);
        private JTextField TbyK = new JTextField(20);
        private JTextField TpostnrK = new JTextField(20);
        private JTextField TadresseK = new JTextField(40);
        private JTextField TnavnK = new JTextField(40);
        private JTextField TtlfK = new JTextField(12);
        private JButton BopretK = new JButton("Opret");
        private JButton BhentK = new JButton("Hent");
        private JButton BrydfelterK = new JButton("RydFelter");
        private JButton BsletK = new JButton("Slet");
        private JButton BopdaterK = new JButton("Opdater");
        private JTextArea AinfoK = new JTextArea();
        private JLabel LinfoK = new JLabel("Info");
    public KundeGUI(){
    setLayout(null);
      setBounds(10, 10, 800, 600);
      add(LmailK);
      LmailK.setBounds(10, 180, 42, 15);
  add(LmobilK);
        LmobilK.setBounds(10, 150, 55, 15);
        add(TmobilK);
        TmobilK.setBounds(70, 150, 70, 21);
    add(LbyK);
        LbyK.setBounds(110, 120, 20, 15);
    add(LpostnrK);
        LpostnrK.setBounds(10, 120, 50, 15);
    add(LadresseK);
        LadresseK.setBounds(10, 90, 50, 15);
    add(LnavnK);
        LnavnK.setBounds(10, 60, 30, 15);
    add(LtlfK);
        LtlfK.setBounds(10, 30, 50, 15);
    add(TmailK);
        TmailK.setBounds(70, 180, 130, 21);
    add(TbyK);
        TbyK.setBounds(130, 120, 100, 21);
    add(TpostnrK);
        TpostnrK.setBounds(70, 120, 30, 21);
    add(TadresseK);
        TadresseK.setBounds(70, 90, 130, 21);
    add(TnavnK);
        TnavnK.setBounds(70, 60, 130, 21);
    add(TtlfK);
        TtlfK.setBounds(70, 30, 60, 21);
    add(BopretK);
        BopretK.setBounds(10, 220, 80, 25);
    add(BhentK);
        BhentK.setBounds(100, 220, 80, 25);
    add(BrydfelterK);
        BrydfelterK.setBounds(100, 260, 100, 25);
    add(BsletK);
        BsletK.setBounds(190, 220, 80, 25);
    add(BopdaterK);
        BopdaterK.setBounds(10, 260, 80, 25);
    add(AinfoK);
        AinfoK.setBounds(250, 130, 100, 70);
    add(LinfoK);
        LinfoK.setBounds(280, 110, 70, 20);  } }
Avatar billede napisok Nybegynder
25. september 2004 - 21:16 #11
har løst det
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