Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse

Namphiz

Mitglied
Hallo,

ich habe folgendes Problem. Ich habe eine Klasse geschrieben, die von JDialog erbt. Dort habe ich unter anderem einen JButton ("OK") erstellt. Wenn man nun auf diesen Button klickt, soll der JDialog geschlossen werden.

Nun habe ich folgendes Problem. Ich wollte eine innere Klasse schreiben, die eben für diese Schließen-Operation zuständig ist. Sie implementiert das ActionListener-Interface. Allerdings meckert Eclipse herum und ich kann anscheinend keine innere Klasse schreiben.

Der (vereinfachte) Code dazu:
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ApacheMenu extends JDialog {

	private JPanel pnlMenu;
        private JButton btnOK;
	
	private int buttonWidth = 200;
	private int buttonHeight = 50;
	
	public ApacheMenu(JFrame owner) {
		super(owner, true);
		
		setTitle("Apache Menu");
		setResizable(false);
		
		createWidgets();
		setupInteractions();
		initWidgets();
		
		pack();
		
	}
	
	private void setupInteractions() {
		
	}
	
	private void initWidgets() {
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(pnlMenu, BorderLayout.CENTER);
		

		pnlMenu.add(btnOK);
		
	}
	
	private void createWidgets() {
		pnlMenu = new JPanel();
		pnlMenu.setLayout(new BoxLayout(pnlMenu, BoxLayout.Y_AXIS));
		
               // ANDERE WIDGETS, WELCHE ICH JETZT HIER MAL ENTFERNT HABE.
		
		btnOK = new JButton("OK");
		btnOK.setAlignmentX(CENTER_ALIGNMENT);
		btnOK.setMinimumSize(new Dimension(buttonWidth, buttonHeight));
		btnOK.setMaximumSize(new Dimension(buttonWidth, buttonHeight));
	}
	
        // HIER MECKERT ECLIPSE!
	private class CloseDialogAction() implements ActionListener {

		@Override
                public void actionPerformed(ActionEvent e) {
                       // CODE DER DAS JDIALOG SCHLIEßT.
                } 
	}
	
}

Ich hoffe ihr könnt mir helfen!

LG!
 
mach die
Code:
()
in Zeile 59 weg.

Generell wäre für sowas eine anonyme Klasse schöner weil kompakter.
 
Richtig, und falls du nicht weißt was eine anonyme Klasse ist: Die definierst du innerhalb eines tieferen Code-Blocks (also nicht unmittelbar im Rumpf der Klasse sondern zB in einer Methode), und erstellst in diesem Zuge eine (und die einzige) Instanz davon:

Java:
// in der createWidgets():
btnOK = new JButton("OK");
btnOK.setAlignmentX(CENTER_ALIGNMENT);
btnOK.setMinimumSize(new Dimension(buttonWidth, buttonHeight));
btnOK.setMaximumSize(new Dimension(buttonWidth, buttonHeight));
btnOk.addActionListener(new ActionListener(){
     @Override
     public void actionPerformed(ActionEvent e){
           dispose();
     }
});

PS: Ich weiß zwar nicht was genau da in den Dialog noch reinkommen soll, aber die Klasse JOptionPane kennst du oder?
 
Danke für die Antworten! Ohne euch hätte ich da wohl noch lange dran gesessen.

Danke nochmals für den Vorschlag von dispose(); für das Schließen des Fensters. Da hätte ich als nächstes noch nach suchen müssen.

PS: Ich weiß zwar nicht was genau da in den Dialog noch reinkommen soll, aber die Klasse JOptionPane kennst du oder?

Noch nicht so wirklich. Muss ich nochmal alles in der API Doc nachlesen.

EDIT: Da sollen noch weitere Widgets in den Dialog. Sonst würde ich JOptionPane nehmen.

PS: Ich hab mit deinem Kurs gelernt, hdi. 😉 Die Klasse ist auch durch ein Video von dir inspiriert. Hab ich jetzt mal ganz dreist übernommen. 😉

Mir entzieht sich der Grund WARUM ApacheMenu von JDialog erbt?

Das habe ich so gemacht, weil diese Klasse nur ein Nebenmenü darstellt. Ich wollte die Klasse vom Haupt-Frame auslagern. Der Übersicht halber.
 
Zuletzt bearbeitet:
Die Klasse ist auch durch ein Video von dir inspiriert. Hab ich jetzt mal ganz dreist übernommen.
Ui, jetzt aber aufpassen was du hier sagst, nicht dass du hier meinen Ruf in den Keller ziehst! :bae: Ne aber ernsthaft, welches Video liegt dem zu Grunde? Oder meinst du einfach das hier:

createWidgets();
setupInteractions();
addWidgets();

Fällt mir auch erst jetzt auf wo du sagst dass du meinen Kurs kennst. Daumen hoch dafür 😉 Wobei du das ja "initWidgets" nennst. Was ist genau der Unterschied zwischen create und init? In meinem Video heißt das addWidgets und ist dafür da die Widgets auf dem Container zu platzieren.

Wegen JDialog / JOptionPane: Wird in meinem Kurs behandelt in Video 85: Dialog-Fenster
 
Zuletzt bearbeitet:
Wobei du das ja "initWidgets" nennst. Was ist genau der Unterschied zwischen create und init? In meinem Video heißt das addWidgets und ist dafür da die Widgets auf dem Container zu platzieren.

Wegen JDialog / JOptionPane: Wird in meinem Kurs behandelt in Video 85: Dialog-Fenster

Create erstellt die Widgets. Und Init soll sie quasi starten/adden. Aber eigentlich könnte ich sie auch addWidgets() nennen.

Wie oben gerade noch editiert. Da sollen noch weitere Widgets in den Dialog. Deshalb JDialog.
 

Zurück
Oben