2016-07-14 7 views
0

プログラムの開始時に表示されるヘルプペインがありますが、これをオフにすることができます。ユーザーが戻ることを望む場合は、メニューバーにオプションを再度アクティブにすることができます。ただし、ヘルプメニューから表示することを選択すると、自動的に「再表示しない」チェックボックスが再チェックされます。どのようにしてボックスを元の状態と同じ状態に保ちますか?ヘルプペインは開いたままにします。JCheckBoxの状態はクラス間で一貫しています

桂:

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(); 
    } 

メニューバー:

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:

更新HelpDialogクラス:

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(); 
     } 

メニューバーからヘルプメニューを表示すると、チェックボックスはオフのままです。ただし、新しいゲームが作成されると、チェックボックスをオフにしてもヘルプダイアログが表示されます。

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

答えて

4

あなたshowHelpDialog()メソッドは、新しいチェックボックスが呼び出されるたびに作成されます。

完全な答えは、GUIのメソッドにこの変更を含んでいます。コンストラクタで一度ダイアログを作成し、showHelpDialog()を表示するだけでよい。

+0

編集が追加されました。新しいゲームでは、まだヘルプボックスが表示されていますが、今すぐボックスがチェックされていません。 –

+0

エラーを見つけました。上記の編集に追加されました。このソリューションは私にそれをもたらしました! –

0

あなたはあなたの要求

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(); 
}  

を上書きしますshowHelpDialogにパラメータを追加することができ、メニューからクリックされたとき

showHelpDialog(true); 

呼び出します。