Java JDialog per Button schließen

Xerxes18

Lieutenant
Registriert
Aug. 2008
Beiträge
700
Guten Tag alle zusammen,

ich habe ein Problem:

Wenn man bei mir auf der Menüleiste auf das Feld "Einschreiben" klickt, erscheint ein Dialogfenster. Ich habe nun erstmal einen Button erstellt, dass das Fenster schließen soll, aber irgendwie funktioniert das nicht.

Code:
if (object.getSource() == einschreiben){
 
            JDialog d=new JDialog(frame, "Einschreiben",true);
            d.setSize(400,400);
            d.setPreferredSize(new java.awt.Dimension(400,400));
            d.setLayout(new FlowLayout(2,80,8));
            d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
 
            JButton ab=new JButton("Abbrechen");
            d.add(ab);
            ab.setActionCommand("Abbrechen");
            
            ab.setMnemonic(KeyEvent.VK_B);
            ab.addActionListener(this);
            d.setVisible(true);
            
            if ("Abbrechen".equals(object.getActionCommand())){
                
                d.setVisible(false);
                d.dispose();
                    
            }
}
 
Hi,

ich glaub dein Fehler war, dass du deinen "Schließe den Dialog Code" also, dass d.dispose() nicht in der actionPerformed Methode (welches das ActionListener Interface vorschreibt) stand.
In deinem Codestück hat man nicht gesehen, wie du den ActionListener implementiert hast.

Hier mal ein Quick'n'Dirty Beispiel wie es gehen würde (hierbei hängt der ActionListener am Button und nicht am Dialog selbst):


PHP:
public class FrameTest {

	private JFrame frame;
	private JDialog dialog;

	public FrameTest() {
		frame = new JFrame();
		frame.setPreferredSize(new Dimension(800, 600));
		dialog = new JDialog(frame, "Titel");
		dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		dialog.setLayout(new GridLayout(1, 1));
	}

	public JDialog getDialog() {
		return dialog;
	}

	public static void main(String[] args) {

		final FrameTest test = new FrameTest();

		JButton button = new JButton("Abbrechen");
		button.setActionCommand("cancel");
		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent actionevent) {
				if ("cancel".equals(actionevent.getActionCommand())) {
					test.getDialog().dispose();
				}

			}
		});
		test.getDialog().add(button);
		test.getDialog().setVisible(true);
		test.getDialog().pack();

	}

}

Greetings

don.dope
 
Zuletzt bearbeitet:
Danke!
 
Zuletzt bearbeitet: (Gefahr, dass es kopiert wird!)
Der Code zum Schließen des JDialog ist unerreichbar, da folgendes gleichzeitig wahr sein müsste:
- action source ist einschreiben
- action command ist "Abbrechen"

Ich würde dir empfehlen, dem "Abbrechen"-Button einen eigenen ActionListener zu spendieren,
oder den "Abbrechen"-Button als Instanzvariable zu speichern und unter das
Code:
if (object.getSource() == einschreiben){ ... }
noch ein
Code:
if (object.getSource() == ab){
//hier schließen
}
zu setzen.
 
Hat er nicht schon einen eigenen ActionListener? Ich dachte das würde in der eigenen Klasse schon passieren?
 
Ja, meine Antwort bezog sich auf deinen ersten Codeschnipsel.

Schreib:
Code:
JButton ab=new JButton("Abbrechen");
...
ab.addActionListener(this);
...

Und statt
Code:
ab.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getDialog().dispose();
			}
		});
schreibst du:
Code:
if (object.getActionCommand().equals("Abbrechen")){
getDialog().dispose();
}
 
Ne, das funktioniert so leider auch nicht und ich weiß ehrlich nicht warum :(
 
Hallo,

das ist jetzt wirklich sehr seltsam, deine Dateien funktionieren bei mir, obwohl da das selbe steht O_o

Somit hat sich das Problem gelöst, vielen vielen Dank :)
 
Zuletzt bearbeitet:
Zurück
Oben