Hi Leute!
Ich hab bei meiner Anwendung jetzt nen Einstellungs-Fenster gemacht und zwar mit nem JFrame. Als ich das alles fertig hatte, ist mir aufgefallen das es besser wäre, wenn das Einstellungs-Fenster Modal wäre.
Also hab ich meine Klasse nicht von JFrame abgeleitet sondern eben von JDialog. Sonst hab ich eigentlich nichts verändert. Vorher funktionierte alles wunderbar ( nur halt, dass das Ding nicht modal war ). Aber jetzt muss ich immer 2x auf z.B. "Abbrechen" drücken, damit das Ding sich schließt.
Der Abbrechen Knopf schickt halt ne Message an den ActionListener, der dann wiederrum dispose() aufruft. Hat jemand ne Ahnung, warum ich immer 2x klicken muss?
Hab hier mal die relevanten Stellen reinkopiert:
Danke schonmal,
VipViper2000
Ich hab bei meiner Anwendung jetzt nen Einstellungs-Fenster gemacht und zwar mit nem JFrame. Als ich das alles fertig hatte, ist mir aufgefallen das es besser wäre, wenn das Einstellungs-Fenster Modal wäre.
Also hab ich meine Klasse nicht von JFrame abgeleitet sondern eben von JDialog. Sonst hab ich eigentlich nichts verändert. Vorher funktionierte alles wunderbar ( nur halt, dass das Ding nicht modal war ). Aber jetzt muss ich immer 2x auf z.B. "Abbrechen" drücken, damit das Ding sich schließt.
Der Abbrechen Knopf schickt halt ne Message an den ActionListener, der dann wiederrum dispose() aufruft. Hat jemand ne Ahnung, warum ich immer 2x klicken muss?
Hab hier mal die relevanten Stellen reinkopiert:
Code:
public class ConfigGui extends JDialog
implements ActionListener, MouseListener, ChangeListener {
private final String ANZEIGE_PANEL = "anzeigePanel";
private final String SONSTIGES_PANEL = "sonstigesPanel";
JSpinner anzahlFilmeSpinner;
Controller con;
JPanel leftPanel, rightPanel, anzeigePanel, controllPanel,
buttonPanel, sonstigesPanel;
Container main;
JTextField pfadFeld, pfadThumbFeld, colorButton;
JCheckBox splashCheck;
boolean isSplashEnabled;
int displayableMovies;
Color cinemaxColor;
String coverPath, coverThumbPath;
private static ConfigGui dia;
//~--- constructors -------------------------------------------------------
private ConfigGui(Frame parent, Controller con) {
super(parent, "Cinemax - Einstellungen", true);
this.con = con;
initPref();
initAndShowGui();
}
//~--- methods ------------------------------------------------------------
public static void showConfigGui(Controller con, Component parent){
Frame frame = JOptionPane.getFrameForComponent(parent);
dia = new ConfigGui(frame, con);
dia.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("abortButton")) {
System.out.println("Abord gedrückt");
abort();
}
}
private void initAndShowGui() {
// Fenster einstellen
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new MyWindowAdapter(this) {
public void windowClosing(WindowEvent e) {
gui.abort();
}
});
setResizable(false);
// Das Content Pane holen
main = getContentPane();
// LeftPanel holen & adden
leftPanel = getLeftPanel();
main.add(leftPanel, BorderLayout.LINE_START);
// Right-Panel holen & adden. RightPanel benutzt ein CardLayout
// zum Anzeigen der Einstellungsdialoge. Deshalb werden Sie auch
// hier geaddet
rightPanel = new JPanel(new CardLayout());
rightPanel.add(getAnzeigePanel(), ANZEIGE_PANEL);
rightPanel.add(getSonstigesPanel(), SONSTIGES_PANEL);
main.add(rightPanel, BorderLayout.CENTER);
// Button-Panel holen & adden
buttonPanel = getButtonPanel();
main.add(buttonPanel, BorderLayout.PAGE_END);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
/**
* Bricht den Einstellungs-Dialog ab. Dazu werden als erstes die
* alten Einstellungen aus der XML-Datei geladen.
*
*/
public void abort(){
initPref();
con.getGui().setDisplayableMovies(displayableMovies);
dispose();
}
}
Danke schonmal,
VipViper2000