Dialog öffnen nach MenüItem Klick

schwaigerf

Grünschnabel
Hi Leute,
ich stehe vor folgendem Problem:
Ich soll über den Menüpunkt "Preferences", der schon angelegt ist, einen Dialog öffnen,
wo man dann folgendes zu sehen bekommt:

A) CheckBox für eine Einstellung
B) Checkbox für eine weitere Einstellung
C) Button für "OK"

Nun, ich weiß jetzt nicht wie ich so einen Dialog mit 2 Checkboxen erstelle....und einem OK Button....
Der User soll dann die Checkboxen anhackeln können oder nicht, und mit OK sollen diese Einstellungen gespeichert werden.

Wie kann ich so einen Dialog über das Menü mit JMenuItem öffnen ?
Wäre nett wenn mir jemand helfen könnte,
Grüße schwaigerf
 
Code:
 class NewJDialog extends javax.swing.JDialog {
    
    /** Creates new form NewJDialog */
    public NewJDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }
    
    /** 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.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        checkBox1 = new javax.swing.JCheckBox();
        checkBox2 = new javax.swing.JCheckBox();
        jPanel2 = new javax.swing.JPanel();
        btn_ok = new javax.swing.JButton();

        getContentPane().setLayout(new java.awt.GridLayout(2, 1));

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        checkBox1.setText("jCheckBox1");
        jPanel1.add(checkBox1);

        checkBox2.setText("jCheckBox2");
        jPanel1.add(checkBox2);

        getContentPane().add(jPanel1);

        btn_ok.setText("OK");
        jPanel2.add(btn_ok);

        getContentPane().add(jPanel2);

        pack();
    }// </editor-fold>
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJDialog(new javax.swing.JFrame(), true).setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify
    private javax.swing.JButton btn_ok;
    private javax.swing.JCheckBox checkBox1;
    private javax.swing.JCheckBox checkBox2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    // End of variables declaration
    
}

Hab das mal mit NetBeans schnell zusammen geklatsch :D, so könnte das Dialog aussehen.

Und so MenuItem,
Code:
public void actionPerformed(ActionEvent event){

if(event == menuItem)
{
   NewJDialog dialog = new NewJDialog();
   dialog.setVisible(true);
}
 
Zuletzt bearbeitet:
Hi,
danke für die rasche Antwort und dem Code.
Das ist jetzt also der JDialog, das ist mir klar....

Und wie baue ich den jetzt ein, dass bei Klick auf das JMenuItem preferences, dass dieser JDialog kommt ?
Gibts dafür ne open() Funktion oder so was ?

EDIT: UPS; ging ja flotter als ich gedacht hatte...
ich probiers mal eben aus DANKE
 
Hey, ich hab jetzt nur noch folgendes Problem:

Ich hab diese Menüstruktur:
menu = new JMenu("Preferences");

Also nur 1 Menüpunkt bei Preferences.
Wo mache ich dann die Funktion actionPerformed rein ?

Ich muss aber dann in dem Dialog der aufgeht, auf variablen des Hauptframes zugreifen können, das funktioniert dann schon oder ?
 
Hi,

ich würde dir zunächst mal dringend empfehlen das hier (Java ist auch eine Insel 6 - Kapitel 'Grafische Oberflächen mit Swing') durchzulesen. Das hat mir das GUI Programmieren in Java beigebracht ;-)


Ich habe übrigens auch einen Code mal schnell getippt, falls du fragen hast bitte melden:

MainFrame Klasse:
Java:
package de.tutorials;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;


@SuppressWarnings("serial")
public class SimpleSwingFrame extends JFrame {
    public SimpleSwingFrame(){
        initialize();
    }
    
    private void initialize(){
        setTitle("MenuItemSample");
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //Beim Schließen Programm beenden
        
        //Menü initialisieren
        JMenuBar menu = new JMenuBar();
        this.setJMenuBar(menu);
        
        JMenu menu_file = new JMenu("File");
        menu.add(menu_file);
        JMenuItem m_close = new JMenuItem("Close");
        menu_file.add(m_close);
        m_close.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ev) {
                dispose();
            }
        });
        
        JMenu menu_extras = new JMenu("Extras");
        menu.add(menu_extras);
        JMenuItem m_pref = new JMenuItem("Preferences...");
        menu_extras.add(m_pref);
        m_pref.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ev){
                //Hier Einstellungs-Menü aufrufen
                PreferencesDialog pref = new PreferencesDialog(me);
                pref.setVisible(true);
                //hier Einstellungen aus dem Dialog auswerten
            }
        });
    }
    
    private SimpleSwingFrame me = this;
    
    /**
     * Einstiegspunkt
     * @param args
     */
    public static void main(String[] args){
        SimpleSwingFrame frame = new SimpleSwingFrame();
        frame.setVisible(true);
    }
}
und die Dialog Klasse:
Java:
package de.tutorials;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class PreferencesDialog extends JDialog {
    public PreferencesDialog(JFrame owner){
        super(owner);
        initialize();
    }
    
    private void initialize(){
        setTitle("Preferences");
        setModal(true);
        setLayout(new GridLayout(3,1));
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setSize(400, 400);
        setLocation(getOwner().getX() + 20, getOwner().getY() + 10);
        
        //Checkbox 1
        JCheckBox cb_1 = new JCheckBox("Setting 1", true);
        add(cb_1);
        //Checkbox 2
        JCheckBox cb_2 = new JCheckBox("Setting 2", true);
        add(cb_2);
        //OK Button
        JButton btn_ok = new JButton("OK");
        add(btn_ok);
        btn_ok.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ev){
                dispose();
            }
        });
    }
}

Lg, Yanick
 
Sorry, müsste aber funktionieren, bei mir (Eclipse 3.2, Java 6) gibts keinen Fehler.

Was sagt er denn für nen Fehler?
Kann sein dass man Membervariablen direkt nicht 'this' zuweisen kann, dann machs doch einfach im Konstruktur ;-)

Lg, Yanick
 
Hallo,
bei mir sieht da so aus:
Code:
menu = new JMenu("Extra");
		JMenuItem pref = new JMenuItem("Preferences");
		menu.add(pref);
		pref.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event)
			{
				PreferencesDialog pref = new PreferencesDialog(me);
			}
		});
		
		private Editor me = this;

Und Editor ist meine Klasse wo das drinnen steht
 
Schreib die 'private Editor me = this;' Variable außerhalb (in die Klasse hinein).
und im Konstruktor initialisierst du sie, etwa so:
Java:
public class Editor{
    public Editor{
        me = this;
        //hier die Controls initialisieren
    }
    
    private Editor me;
}

Btw: ich geh jetzt in Bett, cya
 
hey danke, klappt jetzt soweit.
er öffnet also den Dialog beim Klicken auf Extras - Preferences....
Nun würde ich gerne folgendes auf dem Dialog haben:

Ein JLabel mit einem Text und daneben die Checkbox

Ein JLabel mit einem Text und einem Eingabefeld eines Integer Wertes, das nur aktiv ist, wenn die Checkbox darüber aktiviert ist.
Das ganze soll er speichern.
 
Zurück