2014-10-10 80 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