4

入力パネル内に複数の JTextField と 2 つの JTextAreas を含むプログラムを作成しています。一番下に送信ボタンがあります。ユーザーが各フィールド(JTextAreasを含む)に何かを入力してEnterキーを押すと、テキストファイルが更新され、送信ボタンを押すとファイルが更新され、新しいバージョンが出力されるように設定しましたローカル ディレクトリ。

ユーザーがいずれかのフィールドで Enter キーを押すと、入力が検証されますが、送信ボタンを押したときにすべてのフィールドを再検証したいと考えています。各フィールド (ここでも JTextAreas が含まれます) には、ActionListener または KeyListener (JTextAreas の場合) 内に独自の検証チェックがあります。JTextField に postActionEvent() を使用するのは簡単ですが、JTextAreas に KeyEvent を強制的に発生させる同様の方法はありますか? JButton の ActionEvent 内にあるこれら 2 つのコンポーネントの検証を書き直して、コードを複製したり、メモリを消費したりしたくありません。

残念ながら、機密扱いのマシン (PC) でプログラムを作成しているため、サンプルを提供することはできません。

4

2 に答える 2

4

KeyEventメソッドを単純に呼び出すことができるのに、検証をトリガーするために投稿しようとするのはなぜですかvalidate。たとえば、疑似コードで

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

}

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

private function submitButtonFunction(){
  validate();
}

またDocumentListener、 a の入力に反応したい場合は、 a を使用することをお勧めしますJTextComponent。たとえばKeyListener、ドラッグ アンド ドロップ後にはトリガーされません。の実装によっては、KeyListenerコピー アンド ペーストを使用すると失敗する場合もあります。

于 2012-10-26T18:28:41.703 に答える
3

クラスとメソッドENTERを使用して、押されることをシミュレートできます。もちろん、コンポーネントのすべてを繰り返し処理してから、シミュレートされたキー押下(処理は省略)を呼び出す必要があります。RobotkeyPress(..)keyRelease(..)JTextAreasrequestFocusInWindow(..)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);
}
于 2012-10-26T18:55:54.173 に答える