Java Swing-禁用JCheckbox时出现问题
我正在禁用一个Java Swing-禁用JCheckbox时出现问题,java,swing,checkbox,jcheckbox,Java,Swing,Checkbox,Jcheckbox,我正在禁用一个JCheckbox,然后在setEnabled(…)方法的帮助下启用它 但问题是,如果我禁用未选中的复选框,那么在启用它后它将变为选中 我希望它们在启用后的状态与禁用前相同。是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么这是正常的,因为当您单击复选框时,isSelected()状态会更改 您可以使用isSelected()和setSelected()方法添加检查 您是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么
JCheckbox
,然后在setEnabled(…)
方法的帮助下启用它
但问题是,如果我禁用未选中的复选框,那么在启用它后它将变为选中
我希望它们在启用后的状态与禁用前相同。是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么这是正常的,因为当您单击复选框时,isSelected()状态会更改
您可以使用isSelected()和setSelected()方法添加检查 您是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么这是正常的,因为当您单击复选框时,isSelected()状态会更改
您可以使用isSelected()和setSelected()方法添加检查 以下代码按照您的描述工作:
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");
}
}
下面的代码按照您的描述工作:
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");
}
}
如果调用
setEnabled
,则不应影响所选状态。如果是,那么我建议您重新检查代码,看看是否有任何东西可以解释这种行为。正如其他人所建议的,如果您发布一个代码示例可能会有所帮助
更新:
为了清楚起见,只有两种方法可以更改复选框的选定状态
setSelected
setEnabled
不会更改所选状态。
因此,您的代码中一定有一些奇怪的东西导致了这种情况。如果调用
setEnabled
,则不应影响所选状态。如果是,那么我建议您重新检查代码,看看是否有任何东西可以解释这种行为。正如其他人所建议的,如果您发布一个代码示例可能会有所帮助
更新:
为了清楚起见,只有两种方法可以更改复选框的选定状态
setSelected
setEnabled
不会更改所选状态。
因此,您的代码中一定有奇怪的地方导致了这种情况。我没有得到您的答案。无论如何,我正在通过启动按钮的
xxxxActionPerformed()
方法禁用/启用复选框。styx777试图说您应该在调用setEnabled()
后调用setSelected()
方法。所以你可以选择你想要的组件。我没有得到你的答案。无论如何,我正在通过启动按钮的xxxxActionPerformed()
方法禁用/启用复选框。styx777试图说您应该在调用setEnabled()
后调用setSelected()
方法。所以你可以选择你想要的组件。你可以发布一些代码来演示这个问题吗?双向bean数据绑定可以在这里找到你。我也有同样的问题,只是我的bean绑定有问题。你能发布一些代码来演示这个问题吗?双向bean数据绑定可以在这里找到答案。我也有同样的问题,只是我的bean绑定有问题。