如何根据JCheckBox的状态启用/禁用JTextField?

4

我有一个文本框旁边的Java复选框。

当选择复选框时,我希望文本框被启用,而当未选择时,我不希望它被选择。我尝试使用带有isSelected() 方法的if语句,但它没有起作用。

我该如何响应JCheckBox状态的变化?


2
"说话容易,展示你的代码吧。" [Linus Torvalds] - Alberto Solano
3个回答

15

建议:

  1. 阅读如何使用复选框教程
  2. JCheckBox实例注册一个ItemListener
  3. 将状态更改(即getStateChange())与ItemEvent.SELECTEDItemEvent.DESELECTED进行比较,然后适当地调用foo.setEnabled,其中fooJTextBox实例。

这里有一个SSCCE

public final class JCheckBoxDemo {
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                createAndShowGUI();             
            }
        });
    }

    private static void createAndShowGUI(){
        final JFrame frame = new JFrame("JCheckBox Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(JCheckAndTextPane.newInstance());
        frame.setSize(new Dimension(250, 75)); // for demonstration purposes only
        //frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static final class JCheckAndTextPane extends JPanel{
        private JCheckAndTextPane(){
            super();

            // Create components
            final JTextField textField = new JTextField("Enabled");
            final JCheckBox checkBox = new JCheckBox("Enable", true);
            checkBox.addItemListener(new ItemListener(){
                @Override
                public void itemStateChanged(ItemEvent e) {
                    if(e.getStateChange() == ItemEvent.SELECTED){
                        textField.setEnabled(true);
                        textField.setText("Enabled");
                    }
                    else if(e.getStateChange() == ItemEvent.DESELECTED){
                        textField.setEnabled(false);
                        textField.setText("Disabled");
                    }

                    validate();
                    repaint();
                }
            });

            add(checkBox);
            add(textField);
        }

        public static final JCheckAndTextPane newInstance(){
            return new JCheckAndTextPane();
        }
    }
}

输入图像描述

输入图像描述


2
2个注意事项。 1)SSCCE应包括导入(并非所有人都运行自动化IDE,可以弄清楚它们!)。 2)有关制作出色的屏幕截图的技巧(特别是消除圆角中的“杂散像素”),请参见[如何创建截图?](http://meta.stackexchange.com/questions/99734/how-do-我创建一个截图来说明一个职位)常问问题。 上述这2点外,+1。 - Andrew Thompson

2
使用 isSelected 方法。
然后使用 ItemListener 监听器,以便在选中或取消选中时收到通知。
根据 isSelected 方法的状态,您可以启用或禁用 JTextBox

0

// >点击复选框 >添加事件处理程序 >项目 >ItemStateChange >键入代码

// chckBox1 是我的变量名称

    chckBox2.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent e) {

            if(chckBox2.isSelected()) {
                txtAddCandles.setEnabled(true);
            }

        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接