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

의 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; 
    } 
} 

편집 :

업데이트 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); 

호출합니다.