2014-10-10 97 views
1

我是新来的波动,我有一个疑问:一个面板中保存复选框状态/对话框

我有一个对话框,在该对话框中,有一个复选框,确定和取消按钮。 假设用户选中了复选框并单击确定按钮,当用户再次打开该对话框时,复选框应该被选中。

任何人都可以提出想法,如何暗示这一点。

我知道我可以通过使用setSelected(true)和setSelected(false)方法来做到这一点。

但如何保存复选框的状态。

+1

顶我的头:保存到数据库,写/解析为文本(属性文件,XML,JSON,生TXT),读/写对象文件或使用Java首选项 – gtgaxiola 2014-10-10 13:24:33

+0

保留对原始对话框的引用。到了时候,再次将其设置为可见,并且它将具有相同的大小和位置,并且其中的每个控件都具有相同的状态。 – 2014-10-10 22:36:20

回答

1

您可以将组件传递到JOptionPane,它们将正确显示。

因此,例如,如果您创建JCheckBox并将其传递给JOptionPane,在关闭对话框后,您可以检查复选框的状态并将其存储在任何您想要的位置。下一次要显示对话框时,在通过复选框之前,将其状态设置为您上次存储的状态。

例如(只是为了演示目的):

final JFrame f = new JFrame("Checkbox test"); 
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
f.addWindowListener(new WindowAdapter() { 
    // I store the checkbox state here in a boolean variable: 
    boolean save; 

    @Override 
    public void windowClosing(WindowEvent e) { 
     // Now user wants to close the application, ask confirmation: 
     // We create a check box with the initial value of the stored state: 
     JCheckBox cb = new JCheckBox("Save settings before Exit", save); 
     int res = JOptionPane.showConfirmDialog(null, 
      new Object[] {"Are you sure you want to Exit?", cb}, "Exit?", 
        JOptionPane.OK_CANCEL_OPTION); 

     // Dialog closed, you can save the sate of the check box 
     save = cb.isSelected(); 
     if (res == JOptionPane.OK_OPTION) { 
      if (save) { 
       // Settings can be saved here. 
      } 
      // And exit (by disposing the only frame) 
      f.dispose(); 
     } 
    } 
}); 
f.getContentPane().add(new JLabel("Try to close the application")); 
f.pack(); 
f.setLocationRelativeTo(null); 
f.setVisible(true); 
+0

请不要包装成'while(true){'(无尽循环与'true' ???)让我感动 – mKorbel 2014-10-10 13:41:32

+0

@mKorbel无限循环只是为了再次显示对话框,如果它用'Cancel'关闭用户可以看到复选框处于与上次相同的状态。重写了这个例子来代替使用'JFrame'。 – icza 2014-10-10 14:05:10

+0

thx很多@icza。但是,当我检查复选框**保存**,点击取消,再次调用JOptionPane,我看到**保存**仍然被选中。应**保存**不重置他的状态,只有当我点击**确定**时才保存它。 – okaisan1 2014-10-13 08:27:35