2010-04-27 83 views
0

我禁用JCheckbox,然後在setEnabled(...)方法的幫助下啓用它。Java Swing - 禁用JCheckbox中的問題

但問題是,如果我禁用一個未選中的複選框,那麼在啓用它後,它就會被選中。

我希望所有人在被禁用前都具有相同的狀態。

+1

你可以發佈一些代碼來演示這個問題嗎? – lins314159 2010-04-27 04:54:46

+0

雙向bean數據綁定可以在這裏抓住你。我遇到了同樣的問題,這只是我的bean綁定。 – clinux 2016-06-22 23:57:03

回答

1

您是否使用ActionListener啓用/禁用JCheckBox?如果是這樣,那很正常,因爲當你點擊複選框時,isSelected()狀態會改變。

您可以做的是使用isSelected()和setSelected()方法添加檢查。

+0

我沒有得到你的答案。無論如何,我正在通過開始按鈕的'xxxxActionPerformed()'方法禁用/啓用複選框。 – 2010-04-27 02:58:24

+0

styx777試圖說你應該在調用'setEnabled()'後調用'setSelected()'方法。所以你可以選擇你想要的組件。 – Ham 2010-04-27 06:28:06

1

下面的代碼工作爲你描述:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class CheckboxTest implements ActionListener{ 
    private JCheckBox checkbox = new JCheckBox(); 
    private JButton btn = new JButton("Enable"); 
    public CheckboxTest(){ 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     frame.getContentPane().add(panel);  
     checkbox.setEnabled(false); 
     btn.addActionListener(this); 
     panel.add(checkbox); 
     panel.add(btn); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    } 

    public static void main(String[] args){ 
     new CheckboxTest(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     checkbox.setEnabled(!checkbox.isEnabled()); 
     btn.setText(checkbox.isEnabled()?"Disable":"Enable");  
    } 
} 
1

如果調用setEnabled不應該影響選擇的狀態。如果是,那麼我建議你重新檢查你的代碼,看看是否有任何東西可以解釋這種行爲。正如其他人所建議的,也許你發佈了一個可能有用的代碼示例。

更新: 爲了清楚起見,複選框的選定狀態只有兩種方式可以更改。

  1. setSelected
  2. 用戶點擊一個呼叫上的複選框

的調用setEnabled確實改變選擇狀態。 因此,在你的代碼中必然會引起這種情況。