2010-04-27 84 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确实改变选择状态。 因此,在你的代码中必然会引起这种情况。