Java KeyEvent(特别是JTextArea)是否有postActionEvent版本?

Java KeyEvent(特别是JTextArea)是否有postActionEvent版本?,java,swing,action,jtextarea,keyevent,Java,Swing,Action,Jtextarea,Keyevent,我正在编写一个程序,在一个输入面板中包含多个JTextFields和2个jtextarea。我在底部有一个提交按钮。我对它进行了设置,当用户在每个字段(包括JTextAreas)中键入内容并按下Enter键时,它会更新一个文本文件,当他们按下submit按钮时,它会更新文件,然后在本地目录中输出一个新版本的文件 如果用户在任何字段中按Enter键,它将验证他们的输入,但是,我希望在他们按submit按钮时重新验证所有字段。每个字段(同样包括JTextAreas)在其ActionListener或

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

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


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

当您可以简单地调用
validate
方法(例如,在伪代码中)时,为什么要尝试发布
KeyEvent
来触发验证

myTextArea.getDocument().addDocumentListener(){
  //in each of the method you call validate

}

private function validate( ){
  //do your validation
}

private function submitButtonFunction(){
  validate();
}
还请注意,如果要对
JTextComponent
中的输入做出反应,建议使用
DocumentListener
。例如,拖放后不会触发您的
KeyListener
。根据
键侦听器的实现情况,当您使用复制粘贴时,它也可能会失败。

您可以使用类
按键(…)
按键释放(…)
方法模拟按下ENTER键。当然,您必须遍历组件上的所有
jtextarea
,然后调用
requestFocusInWindow(…)
,然后是模拟按键(
Exception
忽略处理):

Robot Robot=新机器人()//抛出AWTException
...
Component[]components=getContentPane().getComponents();

对于(inti=0;i+1)再次查看信息,但再次仔细查看Java文档对此
requestFocus()
方法的看法。支持
requestFocusInWindow()
此方法的焦点行为可以跨平台统一实现,因此强烈鼓励开发人员在可能的情况下在requestFocus上使用此方法。依赖requestFocus的代码可能在不同的平台上表现出不同的焦点行为platforms@GagandeepBali谢谢你提供了非常有用的信息een madeThank谢谢你在机器人课上给我指点。这将有助于推出我的产品的功能版本。感谢你花时间帮助我!感谢DocumentListener的提醒,复制粘贴是他们进入JTextArea的一个重要部分。但我没有把它讲清楚,这是我的错。没有validation方法,只是内置代码来验证各自EventListener中的每个字段。每个字段都需要太多不同的标准来进行集体验证,或者需要一个通用的验证方法。这就是为什么我需要启动KeyEvent(或者DocumentListener,如果我这样做的话)。感谢您花时间提供帮助。我认为(至少暂时)机器人类是我最好的选择。
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);
}