0

私はJavaプロジェクトに取り組んでおり、キーを押してJTextFieldのクリックをシミュレートする必要があります。私が探しているのは、JButton doClick()メソッドに相当するものです。

キーを押して「Enter」キーを押して、JTextFieldをクリックするのとまったく同じ機能を実行させようとしています。

他にどのような情報を提供すべきかわからない。前もって感謝します。

4

4 に答える 4

2
public void simulateKey(KeyEvent e, Component c) {
   Field f = KeyEvent.class.getField("focusManagerIsDispatching");
   f.setAccessible(true);
   f.set(e, Boolean.TRUE);
   c.dispatchEvent(e);
}

JTextFieldに「Enter」を送信します。これはここから盗まれました。

于 2010-03-15T04:40:08.753 に答える
2

OK、助けてくれてありがとう。はっきりしていなかったと思いますが、あなたのアイデアのおかげで、コードを機能させる方法を発見しました。

両方の関数によって呼び出されるプライベートメソッドを作成することをすでに考えていましたが、コードの一部は、ユーザーがクリックされたJTextFieldを知る必要があります。.getFocusOwner()を発見しました。これにより、Focus(JTextField)で現在のアイテムを参照できます。このようなもの

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_ENTER) {
            Object which = JFrame.getFocusOwner();                
            if(which.getClass() == JTextField.class)
                foo(which);
         }
    }

    public void mouseClicked(MouseEvent e) {                
        Object which = e.getSource();
        if(which.getClass()== JTextField.class) {
            foo(which);
        }
    }

これを行うにはおそらくもっと良い方法がありましたが、基本的に私はJTextFieldsの配列を持っていて、ユーザーが次のJTextFieldをクリックしたときにプログラムは正しく機能していましたが、Enterキーを押すと、入力したばかりのJTextFieldを呼び出す方法がわかりませんでしたそこで、JTextField(フォーカスを必要とする)のクリックをシミュレートしたかったのです。私は自分の問題全体を説明するべきだったと思います。

ありがとうございました。

于 2010-03-15T23:10:51.243 に答える
1

マウスとキーを押しただけで同じことが起こりたい場合は、両方でメソッドを呼び出す方が理にかなっていますか?つまり、とfieldClickedの両方によって呼び出されるようなメソッドがあります。これにより、デバッグが容易になり、非常に混乱する可能性のあるイベントをいじくり回すことが少なくなり、おそらく読みやすくなります。MouseListenerKeyListener

于 2010-03-15T06:31:04.353 に答える
0

ユーザーがEnterキーを押すと、フレーム内の任意の場所をクリックしたときと同じコードが呼び出されます。

それでも私には意味がありません。

ユーザーがフレームの任意の場所をクリックすると、いくつかのことが起こります。

a)テキストフィールドがフォーカスを失う

b)他のいくつかのコンポーネントが焦点を合わせる

ActionListenerをテキストフィールドに追加できます。Enterキーが押されると、ActionListenerが呼び出されます。では、フレームのどこでマウスクリックを生成するかをどのように推測しますか?私にはランダムロジックのようです。

于 2010-03-15T05:04:50.817 に答える