【问题标题】:How can I enable/disable my JTextField depending of the state of a JCheckBox?如何根据 JCheckBox 的状态启用/禁用我的 JTextField?
【发布时间】:2011-08-23 20:10:43
【问题描述】:

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

当复选框被选中时,我希望启用文本框,如果不是,我不希望它被选中。我用isSelected() 方法尝试了if 语句,但它没有做任何事情。

如何对 JCheckBox 的状态变化做出反应?

【问题讨论】:

  • "谈话很便宜。给我看代码。" [莱纳斯·托瓦兹]

标签: java swing event-handling jcheckbox


【解决方案1】:

建议:

  1. 阅读How to Use Check Boxes 教程
  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 个注释。 1) SSCCE 应该包括导入(并非我们所有人都运行能够解决它们的自动 IDE!)。 2) 有关制作出色屏幕截图的技巧(尤其是消除圆角中的“杂散像素”),请参阅How do I create screenshots? 常见问题解答。除了这 2 点,+1。
【解决方案2】:

使用isSelected 方法。

然后您使用ItemListener,以便在选中或未选中时通知您。

并且根据 isSelected 方法的状态,您可以启用或禁用JTextBox

【讨论】:

    【解决方案3】:

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

    // chckBox1 是我的变量名

        chckBox2.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
    
                if(chckBox2.isSelected()) {
                    txtAddCandles.setEnabled(true);
                }
    
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2018-01-06
      • 2018-09-26
      • 2019-04-13
      相关资源
      最近更新 更多