Menu - Actionlistener

woisch

Grünschnabel
hi

Ich komme irgendwie mit meinem Programm nicht mehr weiter.

Hab vor kurzem angefangen mit Swings zu arbeiten und wollte eine graphische Oberfläche für ein Programm erst mal erschaffen.

Dazu hab ich ein Menu erstellt, welches einige Untermenus beinhaltet.
Mein Ziel war es, dass mit einem Klick auf ein Menuitem im Panel ein Objekt erstellt wird.
Aber irgendwie komme ich mir dem Actionlistener nicht weiter.

-----------------------------------------------------------------------------------------------------------

public menu()
{
JMenuBar leiste = new JMenuBar();
JMenu neu = new JMenu("Neu... ALT + A");
neu.add(new JMenuItem("Nr 1."));
neu.add(new JMenuItem("Nr 2."));
neu.addActionListener(this);

p = new JPanel();
}


public void actionPerformed(ActionEvent e)
{
if(e.getSource() instanceof JMenuItem)
{
if(e.getActionCommand().equals("Nr 1."))
{System.out.println("Und Tschüss ..."); fensterschliessen();

}
else
{if(e.getActionCommand().equals("Nr 2."))
{ add();
}
}


}

public void add()
{
JLabel hallo = new JLabel("Hallo");
getContentPane().add(p);
p.add(hallo);
}

-------------------------------------------------------------------------------------------------------------

Mein Problem liegt jetzt dadrin, dass ich noch nicht drauf gekommen bin warum er nicht das Label added.

Bitte um hilfe

mfg

ps: die Methode zum Schliesen wird ausgeführt (fensterschliessen() )
 
Zuletzt bearbeitet:
Servus!

Code:
/*
 * TestMenuFrm.java
 *
 * Created on 3. November 2003, 19:53
 */
import javax.swing.JLabel;
/**
 *
 * @author  Administrator
 */
public class TestMenuFrm extends javax.swing.JFrame {
    
    /** Creates new form TestMenuFrm */
    public TestMenuFrm() {
        initComponents();
        setSize(320,240);
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItem3 = new javax.swing.JMenuItem();

        setTitle("FrmMnuTest");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jMenu1.setText("Menu");
        jMenuItem1.setText("Nr. 1");
        jMenuItem1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jMenuItem1MousePressed(evt);
            }
        });

        jMenu1.add(jMenuItem1);

        jMenuItem2.setText("Nr. 2");
        jMenuItem2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jMenuItem2MousePressed(evt);
            }
        });

        jMenu1.add(jMenuItem2);

        jMenuItem3.setText("Nr. 3");
        jMenuItem3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jMenuItem3MousePressed(evt);
            }
        });

        jMenu1.add(jMenuItem3);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        pack();
    }
    
    private void jMenuItem3MousePressed(java.awt.event.MouseEvent evt) {
        // Add your handling code here:
        System.out.println("Nr. 3");
        jPanel1.add(new JLabel("Nr. 3"));
        jPanel1.updateUI();
    }
    
    private void jMenuItem2MousePressed(java.awt.event.MouseEvent evt) {
        // Add your handling code here:
        System.out.println("Nr. 2");
        jPanel1.add(new JLabel("Nr. 2"));
        jPanel1.updateUI();
    }
    
    private void jMenuItem1MousePressed(java.awt.event.MouseEvent evt) {
        // Add your handling code here:
        System.out.println("Nr. 1");
        jPanel1.add(new JLabel("Nr. 1"));
        jPanel1.updateUI();
    }
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new TestMenuFrm().show();
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration
    
}

du hast glaube ich einen updateUI() aufruf nach deiner GUI Änderung vergessen ...

Gruß Tom
 
erst einmal aber noch éine kleine "schönheitsfrage"

wie kann ich den actionlistener auf ein untermenu anwenden?
also zb in deinem beispiel:

JMenu jMenuItem2 = new JMenu("anlegen... ALT + A");
jMenuItem2.add(new JMenuItem("Beispiel1"));
jMenuItem2.add(new JMenuItem("Beispiel2"));

weil dann hat man ja keine direkten namen fur das menuitem oder gibt es noch eine andere möglichkeit diesen dann festzulegen?

mfg woisch
 
Servus!

Code:
/*
 * FrmMenuTest2.java
 *
 * Created on 8. November 2003, 15:07
 */
import java.awt.event.*;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import java.awt.MenuBar;
/**
 *
 * @author  Administrator
 */
public class FrmMenuTest2 extends javax.swing.JFrame {
    
    private MyMousePressed mmp = null;
    
    /** Creates new form FrmMenuTest2 */
    public FrmMenuTest2() {
        initComponents();
        setSize(320,240);
        mmp = new MyMousePressed();
        addMyMouseListenerRek(jMenu1);
    }
    
    private void addMyMouseListenerRek(JMenu jmnu){
        int itemCnt = jmnu.getItemCount();
        
        for (int i = 0; i < itemCnt ;i++){
            if(jmnu.getItem(i) instanceof JMenu){
                addMyMouseListenerRek((JMenu)jmnu.getItem(i));
            }else{
                //else(jmnu.getItem(i) instanceof JMenuItem){
                JMenuItem jme = jmnu.getItem(i);
                jme.addMouseListener(mmp);
            }
        }
        
    }
    
    
    
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItem3 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenuItem4 = new javax.swing.JMenuItem();
        jMenuItem5 = new javax.swing.JMenuItem();
        jMenuItem6 = new javax.swing.JMenuItem();

        setTitle("Menu Test Frame");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jMenu1.setText("Menu");
        jMenuItem1.setText("Item1_0");
        jMenu1.add(jMenuItem1);

        jMenuItem2.setText("Item1_1");
        jMenu1.add(jMenuItem2);

        jMenuItem3.setText("Item1_2");
        jMenu1.add(jMenuItem3);

        jMenu2.setText("Menu");
        jMenuItem4.setText("Item2_0");
        jMenu2.add(jMenuItem4);

        jMenuItem5.setText("Item2_1");
        jMenu2.add(jMenuItem5);

        jMenu1.add(jMenu2);

        jMenuItem6.setText("Item1_3");
        jMenu1.add(jMenuItem6);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        pack();
    }
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new FrmMenuTest2().show();
    }
    
    class MyMousePressed extends MouseAdapter{
        public void mousePressed(MouseEvent evt){
            Object o = null;
            if ( (o = evt.getSource()) instanceof JMenuItem && !(o instanceof JMenu)){
                JMenuItem tmp = (JMenuItem) o;
                String tmpStr = null;
                System.out.println((tmpStr=tmp.getText()));
                if (tmpStr == null)
                    return;
                if (tmpStr.charAt(4) == '2'){
                    System.out.println("Untermenü Eintrag");
                } else { System.out.println("Hauptmenü Eintrag"); }
            }
        }
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JMenuItem jMenuItem4;
    private javax.swing.JMenuItem jMenuItem5;
    private javax.swing.JMenuItem jMenuItem6;
    // End of variables declaration
    
}

Gruß Tom
 
Zurück