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

Jef*_*eff 4 java swing event-handling jcheckbox

我在文本字段旁边有一个Java复选框.

选中复选框后,我希望启用文本框,如果没有,我不希望它被选中.我尝试了if使用该isSelected()方法的声明,但它没有做任何事情.

我如何应对JCheckBox的状态变化?

mre*_*mre 15

建议:

  1. 阅读如何使用复选框教程
  2. 注册一个ItemListenerJCheckBox实例
  3. 状态变化(即比较getStateChange())来完成ItemEvent.SELECTED,或者ItemEvent.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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

  • 2个音符.1)SSCCE应该包括导入(并不是我们所有人都运行自动化的IDE来解决它们!).2)有关制作精彩屏幕截图的提示(特别是摆脱圆角中的"杂散像素"),请参阅[如何创建屏幕截图?](http://meta.stackexchange.com/questions/99734/如何创建一个截图 - 说明一个帖子的常见问题解答.除了那两点,+1. (2认同)