Event Handling JDialog schließen, sobald ein neuer erzeugt wird

Trayel

Neues Mitglied
Hallo liebe Java-Forum gemeinde,nachdem ich nach Stundenlangem Googlen & versuchen festgestellt habe, dass ich mein Problem nicht alleine lösen kann, dann auch noch meinen Zugang zu meinem altem Java-Forum-Account verloren habe, musste ich mich jetzt auch noch neu registrieren um endlich nach Hilfe bei den Profis zu suchen :bae:Mein Problem wie im Titel beschrieben:Über ein JMenuItem meines Frames wird per ActionListener ein JDialog erstellt. Soweit alles gut. Wenn ich diesen JDialog nun nicht schließe und ich erneut auf den Menüeintrag klicke, wird ein weiterer JDialog erstellt und der alte bleibt dabei offen und das geht dann so ewig weiter, sprich es werden immer mehr JDialog-Fenster erstellt ohne das die alten entweder geschlossen werden oder einfach auf den im Hintergrund geöffneten JDialog gewechselt wird.Ich könnte das Problem bedingt lösen indem ich den JDialog auf setModal(true) setze und somit das Hauptfenster erst garnicht ansteuern kann ohne den JDialog zu schließen, was ich aber nicht bevorzugen würde. Es gibt doch bestimmt auch eine schönere Lösung womit man ohne den JDialog zu schließen weiterhin auf dem Hauptfenster agieren kann und dennoch nicht jedes mal ein neuer weiterer JDialog erstellt wird, oder?
Code:
Das erstellen der JMenuBar inkl. der JMenu und zugewiesenem MenuListener:

private void createMenuBar(GUI gui)
{
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Menu");
JMenu help = new JMenu("Help");

JMenu info_menu = new JMenu("Info");
JMenuItem game_rules = new JMenuItem("Game Rules");
game_rules.addActionListener(new MenuListener(gui));
JMenuItem console_output = new JMenuItem("Show Console Output");
console_output.addActionListener(new MenuListener(gui));

info_menu.add(game_rules);
info_menu.add(console_output);

JMenuItem settings = new JMenuItem("Settings");
settings.addActionListener(new MenuListener(gui));
JMenuItem about = new JMenuItem("About");
about.addActionListener(new MenuListener(gui));

menu.add(info_menu);
menu.add(settings);
menu.add(about);

menuBar.add(menu);
menuBar.add(help);
gui.setJMenuBar( menuBar );
}




und hier der Code des MenuListener:

private class MenuListener implements ActionListener
{
private GUI gui;
MenuListener(GUI gui)
{
this.gui = gui;
}

public void actionPerformed(ActionEvent e)
{
switch(((JMenuItem) e.getSource()).getText())
{
case "Game Rules":
rules_dialog = new JDialog(gui, "Game Rules",true);
rules_dialog.setLocationRelativeTo(gui);
rules_dialog.setLayout(new FlowLayout());
rules_dialog.setBackground(Color.WHITE);
rules_dialog.getContentPane().setBackground(Color.WHITE);
rules_dialog.setSize(600, 320);
rules_dialog.setResizable(false);
JLabel rules_text = new JLabel();
rules_text.setBackground(Color.WHITE);
rules_text.setOpaque(true);
rules_text.setText("<html>\"Nine Men's Morris\" - Gaming rules:<br><br>"
+"The board consists of a grid with twenty-four<br>"
+ "intersections or points. Each player has nine<br>"
+ "pieces, or \"men\", usually colored black and white.<br>"
+ "Players try to form 'mills' - three of their own men<br>"
+ "lined horizontally or vertically - allowing a player<br>"
+ "to remove an opponent's man from the game. A<br>"
+ "player wins by reducing the opponent to two<br>"
+ "pieces (where he could no longer form mills and<br>"
+ "thus be unable to win), or by leaving him without<br>"
+ "a legal move.<br>"
+ "<br>"
+ "The game proceeds in three phases:<br>"
+ "<br>"
+ "1. Placing men on vacant points<br>"
+ "2. Moving men to adjacent points<br>"
+ "3. (Optional phase) Moving men to any vacant point<br>"
+ "when a player has been reduced to three men</html>");
JLabel rules_icon = new JLabel(new ImageIcon(getClass().getResource("/board.png")));
rules_icon.setBackground(Color.WHITE);
rules_icon.setOpaque(true);
rules_dialog.add(rules_text);
rules_dialog.add(rules_icon);
rules_dialog.pack();
rules_dialog.setVisible(true);
break;
}
}
}


Tut mir leid, dass ich den Code ohne Java Tags posten musste aber diese haben den Code (warum auch immer) komplett zerwurschtelt und unlesbar gemacht (zumindest wenn ich auf Vorschau geklickt habe...).

Mit freundlichen Grüßen Trayel
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Wenn dieser Code ohne Tags ist, wie hast du ihn dann eingefärbt? Das muss doch eine Riesenarbeit gewesen sein.

Du könnest mit einer statischen Variable arbeiten. Im Konstruktor des Dialogs wird eine Variable erster mit dem aktuellen Dialog belegt. Wird ein weiteres Objekt angelegt, so guckt dieses nach, ob erster null ist. Ist erster nicht null, so holt das Objekt den ersten Dialog in den Vordergrund und disposed sich selbst.
 
Zuletzt bearbeitet:

Enceladus271

Bekanntes Mitglied
Da der Dialog nur die Spielregeln anzeigt, macht es Sinn den Dialog nur einmal zu erstellen, statt immer neue Dialoge zu erzeugen. In diesem Fall würde sich lazy initialization anbieten:

Java:
private JDialog dialog = null;

private void showDialog() {
  if (dialog == null) {
    // Dialog erzeugen
  }
  dialog.setVisible(true);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
T JDialog schließen, wenn ESC gedrückt wurde AWT, Swing, JavaFX & SWT 2
W JDialog ohne zum Fenster Schließen AWT, Swing, JavaFX & SWT 2
R JDialog schließen AWT, Swing, JavaFX & SWT 7
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
B Eingaben im JDialog abwarten AWT, Swing, JavaFX & SWT 4
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
D Button auf geöffnetem JDialog AWT, Swing, JavaFX & SWT 5
N Definitionen JDialog AWT, Swing, JavaFX & SWT 7
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M JDialog statt JFrame AWT, Swing, JavaFX & SWT 22
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
K JDialog zeigt Components nicht an AWT, Swing, JavaFX & SWT 3
S Jframe aus JDialog starten AWT, Swing, JavaFX & SWT 4
M JDialog übergibt eingaben nicht an aufrufende klasse AWT, Swing, JavaFX & SWT 15
S Assistent im JDialog AWT, Swing, JavaFX & SWT 7
H Swing JDialog cannot be resolved as a typ AWT, Swing, JavaFX & SWT 12
C Swing JDialog "flutet" den Arbeitsspeicher AWT, Swing, JavaFX & SWT 9
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
C Swing JDialog Ladebildschirm wird nicht angezeit AWT, Swing, JavaFX & SWT 5
Jagson Mit JMenu auf jDialog zurück? Wie? AWT, Swing, JavaFX & SWT 8
A JDialog (modal) blockiert alle Fenster! AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
A Swing JDialog KeyBindings und Textfelder AWT, Swing, JavaFX & SWT 5
D Daten von JDialog an JTable in JFrame übergeben AWT, Swing, JavaFX & SWT 7
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
J Swing JDialog gleichzeitig mit JFrame anzeigen AWT, Swing, JavaFX & SWT 8
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
S Schrift ändern in JDialog AWT, Swing, JavaFX & SWT 3
S Problem mit JDialog AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
hdi Swing Genaue Funktionsweise von modalem JDialog? AWT, Swing, JavaFX & SWT 11
U JDialog ohne Taskleiste AWT, Swing, JavaFX & SWT 7
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
Ollek JDialog Koponenten neu anordnen AWT, Swing, JavaFX & SWT 3
A JDialog AWT, Swing, JavaFX & SWT 10
Dit_ SwingUtilities.invokeLater und Modaler JDialog AWT, Swing, JavaFX & SWT 11
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A JDialog ausdrucken AWT, Swing, JavaFX & SWT 7
aze JDialog mit runden ecken AWT, Swing, JavaFX & SWT 8
Dit_ JDialog nur horizontal vergrößern AWT, Swing, JavaFX & SWT 3
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
H JDialog, Modal - Klassenübergreifend => Problem AWT, Swing, JavaFX & SWT 5
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
K Swing JDialog aus Frame ausrufen AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
B JDialog AWT, Swing, JavaFX & SWT 6
J Swing Probmel mit JDialog (Modal/FocusLost/Button) AWT, Swing, JavaFX & SWT 5
E Swing Fehlerhaftes Verhalten bei gleichzeitigen Verwendnen von PopUpMenu und JDialog?! AWT, Swing, JavaFX & SWT 5
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
E Daten von JDialog nach JFrame übertragen AWT, Swing, JavaFX & SWT 4
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
D Mehrere Comboboxen in JDialog AWT, Swing, JavaFX & SWT 2
F JDialog per Button schliessen - klappt nicht AWT, Swing, JavaFX & SWT 4
BattleMaster246 JDialog erscheint in der Taskbar AWT, Swing, JavaFX & SWT 7
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
P Swing JDialog schliesst nicht AWT, Swing, JavaFX & SWT 2
X Swing JDialog von JInternalFrames überlappen lassen AWT, Swing, JavaFX & SWT 2
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
N Swing Frage zu modalem JDialog. AWT, Swing, JavaFX & SWT 16
A JFrame oder JDialog AWT, Swing, JavaFX & SWT 12
B Swing JDialog : Herausfinden wie dieser beendet wurde? AWT, Swing, JavaFX & SWT 2
T JDialog ohne Fenstermanager? AWT, Swing, JavaFX & SWT 2
S JDialog in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 3
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
K Swing JDialog ohne Titlebar mit Rahmen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben