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
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: