java - 单击按钮时无法启用 JTextField

标签 java swing jtextfield

我不确定为什么我的 JTextField 在单击时没有被启用。

这是我创建和设置 JTextField 的代码:

PromptHandler ph = new PromptHandler(this);
textPanel = new JPanel();
arEntry = new JTextField(REGION_TEXT_FIELD_COLUMNS);
arEntry.setToolTipText(ENTER_NEW_REGION_ID_TITLE_TEXT);
arEntry.setActionCommand(ENTER_NEW_REGION_ID_TITLE_TEXT);
arEntry.addActionListener(ph);
textPanel.add(arEntry);

下面是 PromptHandler 中处理文本字段的代码:

private HelloWorld hwApp;
private String id;

public PromptHandler (HelloWorld hw) {
    hwApp = hw;
}

@Override
public void actionPerformed(ActionEvent ae) {
    String command = ae.getActionCommand();
    switch(command) {
        case ENTER_NEW_REGION_ID_TITLE_TEXT:
            hwApp.arEntry.setEnabled(true);
            break;

最佳答案

ActionListener 与鼠标交互无关。 ActionListener 用于提供组件可能发生的一些不伦不类的操作的通知。对于 JTextField,通常意味着用户已触发某些“应用”操作(通常通过 Enter 键)

如果你想监听一个字段与鼠标的交互,那么你需要一个MouseListener

public class TestField {

    public static void main(String[] args) {
        new TestField();
    }

    public TestField() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            JTextField field = new JTextField(20);
            field.setEnabled(false);
            add(field);
            field.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    e.getComponent().setEnabled(!e.getComponent().isEnabled());
                }
            });
        }
    }
}

我对此的担忧是,为什么?如果您要在单击时启用该字段,那么禁用它有何意义?唯一能做的就是阻止它接收键盘焦点,直到它被启用。

关于java - 单击按钮时无法启用 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865717/

相关文章:

java - 使用 JAXB 解码在下面的代码中给出 null 吗?

java - 我怎样才能在网格布局中看到我的表格?

java - JTextfield 在键入时动态添加文本

java - 如何在GUI中对私有(private)变量应用Getter/Setter方法?

java - jsp页面显示特殊字符

java - 从源码中获取java程序的I/O

java - 我将如何在 Java 中的 JPanel 上重复图像?

java - 尝试将 JTextField 转换为 Integer 时出现 NumberFormatException

Java 预处理器检查操作系统

java - 单选按钮问题