Как я могу включить / отключить мой JTextField в зависимости от состояния JCheckBox? - PullRequest
4 голосов
/ 24 августа 2011

У меня есть флажок Java рядом с текстовым полем.

Когда флажок установлен, я хочу, чтобы текстовое поле было включено, а когда нет, я не хочу егобыть выбранным.Я пробовал оператор if с методом isSelected(), но он ничего не делал.

Как я могу реагировать на изменения состояния JCheckBox?

Ответы [ 2 ]

15 голосов
/ 24 августа 2011

Предложение:

  1. Прочитайте Как использовать флажки учебник
  2. Зарегистрируйте ItemListener для JCheckBoxэкземпляр
  3. Сравнить изменение состояния (т. е. getStateChange()) с ItemEvent.SELECTED или ItemEvent.DESELECTED, а затем соответствующим образом вызвать foo.setEnabled, где foo - это экземпляр JTextBox.

Вот 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();
        }
    }
}

enter image description here

enter image description here

2 голосов
/ 24 августа 2011

Используйте метод isSelected.

Затем вы используете ItemListener, поэтому вы будете уведомлены, когда он отмечен или не отмечен.

И в зависимости от состояния метода isSelected, вы можете включить или отключить JTextBox.

...