2016-07-14 38 views
0

Ich habe eine Hilfe-Fenster, die am Anfang eines Programms angezeigt wird, kann aber deaktiviert werden. Wenn der Benutzer es zurückgeben möchte, gibt es eine Option in der Menüleiste, um es wieder zu aktivieren. Wenn sie es jedoch über das Hilfemenü anzeigen lassen, überprüft es automatisch das Feld "Nicht mehr anzeigen". Wie behalte ich die Box in dem Zustand, in dem der Benutzer sie ursprünglich hatte, öffne aber trotzdem den Hilfebereich?JCheckBox Zustand bleibt konsistent unter den Klassen

Gui:

public class Gui { 
    private Game game; 
    private JFrame frame; 
    private MenuBar menuBar; 

    private HelpDialog helpMenu; 
    private boolean showHelp; 

    public Gui(Game game) { 
     this.game = game; 
     this.showHelp = true; 
     this.createAndShowGUI(); 
    } 

    public boolean shouldShowHelpDialog() { 
     return this.showHelp; 
    } 

    public void displayHelp() { 
     this.helpMenu.showHelpDialog(); 
    } 

MenuBar:

public class MenuBar { 
    private JMenuBar menuBar; 
    private JMenu menu; 
    private JMenuItem menuItem; 
    private JFrame frame; 
    private Gui gui; 
    private Game game; 

    public MenuBar(JFrame frame, Gui gui, Game game) { 
     this.menuBar = new JMenuBar(); 
     this.frame = frame; 
     this.gui = gui; 
     this.game = game; 
    } 

    public void buildMenuBar() { 
     this.buildFileMenu(); 
     this.buildSettingsMenu(); 
     this.buildHelpMenu(); 

     this.frame.setJMenuBar(this.menuBar); 
    } 

    private void buildHelpMenu() { 
     this.menu = new JMenu("Information"); 
     this.menu.setMnemonic(KeyEvent.VK_I); 
     this.menu.getAccessibleContext().setAccessibleDescription("Help menu"); 

     JMenuItem menuHelp = new JMenuItem("Help", KeyEvent.VK_H); 
     menuHelp.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       MenuBar.this.gui.displayHelp(); 
      } 
     }); 
     this.menu.add(menuHelp); 

     this.menuBar.add(this.menu); 
    } 

HelpDialog:

public class HelpDialog { 

    private boolean shouldShowHelpDialog; 
    private JFrame theFrame; 

    public HelpDialog(boolean helpDialog, JFrame frame) { 
     this.shouldShowHelpDialog = helpDialog; 
     this.theFrame = frame; 
    } 

    public boolean showHelpDialog() { 
     if (!this.shouldShowHelpDialog) { 
      return false; 
     } 

     JCheckBox shouldShowCheckBox = new JCheckBox("Do not show this message again", this.shouldShowHelpDialog); 

     Object[] msgContent = { this.buildHelpPane(), shouldShowCheckBox }; 

     JOptionPane.showMessageDialog(this.theFrame, msgContent, "Help", JOptionPane.INFORMATION_MESSAGE); 

     return shouldShowCheckBox.isSelected(); 
    } 

    private Object buildHelpPane() { 
     String helpMessage = "Game rules: This is how you play."; 

     JTextArea helpTextArea = new JTextArea(helpMessage); 
     helpTextArea.setRows(6); 
     helpTextArea.setColumns(40); 
     helpTextArea.setLineWrap(true); 
     helpTextArea.setWrapStyleWord(true); 
     helpTextArea.setEditable(false); 
     helpTextArea.setOpaque(false); 

     JScrollPane helpPane = new JScrollPane(helpTextArea); 
     return helpPane; 
    } 
} 

EDIT:

Aktualisiert HelpDialog Klasse:

public class HelpDialog { 
     private boolean shouldShowHelpDialog; 
     private JFrame theFrame; 
     private JCheckBox shouldShowCheckBox; 

     public HelpDialog(boolean helpDialog, JFrame frame) { 
      this.shouldShowHelpDialog = helpDialog; 
      this.theFrame = frame; 


      this.shouldShowCheckBox = new JCheckBox("Do not show this message again", this.shouldShowHelpDialog); 
     } 

     public boolean showHelpDialog() { 
      if (!this.shouldShowHelpDialog) { 
       return false; 
      } 

      Object[] msgContent = { this.buildHelpPane(), shouldShowCheckBox }; 

      JOptionPane.showMessageDialog(this.theFrame, msgContent, "Help", JOptionPane.INFORMATION_MESSAGE); 

      return shouldShowCheckBox.isSelected(); 
     } 

Das Kontrollkästchen bleibt jetzt unmarkiert, wenn das Hilfemenü über die Menüleiste angezeigt wird. Wenn nun ein neues Spiel erstellt wird, wird jedoch der Hilfe-Dialog angezeigt, selbst wenn das Kontrollkästchen deaktiviert ist.

Volle Antwort beinhaltet diese Änderung auf das Verfahren in der GUI:

public void displayHelp() { 
    this.showHelp = this.helpMenu.showHelpDialog(); 
} 

Antwort

4

Ihre showHelpDialog() -Methode erstellt ein neues Kontrollkästchen jedes Mal aufgerufen wird. Sie sollten den Dialog einmal im Konstruktor erstellen, und showHelpDialog() sollte ihn nur anzeigen.

+0

Bearbeitung hinzugefügt. Bei einem neuen Spiel wird der Hilfe-Dialog immer noch angezeigt, gerade jetzt mit deaktivierter Box. –

+0

Fehler gefunden. Hinzugefügt, um oben zu bearbeiten. Diese Lösung hat mich dazu geführt! –

0

Sie können einen Parameter showHelpDialog hinzuzufügen, die Ihre Anfrage

public boolean showHelpDialog(boolean override) { 
    if(!override){ 
     if (!this.shouldShowHelpDialog) { 
      return false; 
     } 
    } 

    JCheckBox shouldShowCheckBox = new JCheckBox("Do not show this message again", this.shouldShowHelpDialog); 

    Object[] msgContent = { this.buildHelpPane(), shouldShowCheckBox }; 

    JOptionPane.showMessageDialog(this.theFrame, msgContent, "Help", JOptionPane.INFORMATION_MESSAGE); 

    return shouldShowCheckBox.isSelected(); 
}  

und rufen Sie überschreibt

showHelpDialog(true); 

, wenn Sie aus dem Menü angeklickt.