我正在编写一个程序,它在一个输入面板中包含多个 JTextFields 和 2 个 JTextAreas。我在底部有一个提交按钮。我已经设置好了,当用户在每个字段(包括 JTextAreas)中输入内容并按下 Enter 键时,它会更新一个文本文件,当他们按下提交按钮时,它会更新该文件,然后在其中输出它的新版本本地目录。

如果用户在任何字段中按 Enter,它会验证他们的输入,但是,我想在他们按下提交按钮时重新验证所有字段。每个字段(同样,包括 JTextAreas)在其 ActionListener 或 KeyListener(对于 JTextAreas)中都有自己的验证检查。对 JTextField 使用 postActionEvent() 很容易,但是 是否有类似的方法让 JTextAreas 强制触发 KeyEvent? 我不想通过在 JButton 的 ActionEvent 中重写这两个组件的验证来重复代码和消耗内存。

不幸的是,我无法提供示例,因为我正在分类机器 (PC) 上编写程序。

最佳答案

您可以使用 Robot keyPress(..)keyRelease(..) 方法模拟按下 ENTER 键。您当然必须遍历组件上的所有 JTextAreas 并调用 requestFocusInWindow(..) 后跟模拟按键(省略 Exception 处理):

Robot robot = new Robot();//throws AWTException

...

Component[] components=getContentPane().getComponents();

for(int i=0;i<components.length;i++)
{
    if(components[i] instanceof JTextArea) {
         components[i].requestFocusInWindow();
         simulateEnter();
     }
}

public static void simulateEnter() {
     robot.keyPress(KeyEvent.VK_ENTER);
     robot.keyRelease(KeyEvent.VK_ENTER);
}

10-08 14:36