无法启用灰显 (.setEnabled(false)) JtextField 或 JTextArea

Cannot enable grayed-out (.setEnabled(false)) JtextField or JTextArea

不幸的是,我无法为 JTextField 或 JTextField(都试过)打开 .setEnable()。它保持灰色,因此用户无法输入。请帮帮我。

详细信息:taTwo 可以是 JTextField 或 JTextArea,但我尝试的任何一个都无法启用。它应该为 A 禁用但应该为 B 启用,因此如果用户选择 A he/she 不能在 taTwo 字段中输入值,但是如果用户选择 B he/she 可以在 taTwo 中写入。

方法如下:

public void btnAddtreeAction() {
    this.btnAddtree.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            
            JPanel dialogPanel = new JPanel();
            dialogPanel.setPreferredSize(new Dimension(60,60));
            
            String[] choices = {"A", "B"};
            JComboBox<String> cb = new JComboBox<String>(choices);
            
            JTextArea taOne = new JTextArea(1,30);
            JTextField taTwo = new JTextField();
            taTwo.setEnabled(false);

            Object[] myObject = {"Options:", cb,
                                "Input first:", taOne,
                                "Input second:", taTwo};
            
            JOptionPane.showConfirmDialog(frame, myObject, "Form", JOptionPane.OK_CANCEL_OPTION);
            
            if (cb.getSelectedItem().toString().equals("A")) {
               //something will happen here
            } else if (cb.getSelectedItem().toString().equals("B")) {
                taTwo.setEnabled(true);
              //something will happen here
            }
        }
    });
}

在您的 actionPerformed 方法中,您正在创建一个 new JTextField,您不会将其添加到 GUI 中。我假设您在代码中的某个地方有另一个名为 taTwo 的变量,而您没有 post。您 没有 actionPerformed 方法中更改该变量。尝试删除这行代码:

JTextField taTwo = new JTextField();

如果我正确理解了你的问题,你需要将你的 enablemet/disablement 代码移动到另一个 ActionListener 并将其添加到你的组合框中。像这样:

public void btnAddtreeAction() {
    this.btnAddtree.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            
            JPanel dialogPanel = new JPanel();
            dialogPanel.setPreferredSize(new Dimension(60,60));
            
            String[] choices = {"A", "B"};
            JComboBox<String> cb = new JComboBox<String>(choices);
            
            JTextArea taOne = new JTextArea(1,30);
            JTextField taTwo = new JTextField();
            taTwo.setEnabled(false);
            cb.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (cb.getSelectedItem().toString().equals("A")) {
                        taTwo.setEnabled(false);
                        //something will happen here
                    } else if (cb.getSelectedItem().toString().equals("B")) {
                        taTwo.setEnabled(true);
                        //something will happen here
                    }
                }
            });

            Object[] myObject = {"Options:", cb,
                                "Input first:", taOne,
                                "Input second:", taTwo};
            
            JOptionPane.showConfirmDialog(frame, myObject, "Form", JOptionPane.OK_CANCEL_OPTION);
        }
    });
}