1

アクションリスナーを持つ JButton があります。

btn_.addActionListener(new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        // DO STUFF
    }
}

そして、重要なイベントをリッスンする JSpinner があります。

spn_.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_ENTER)
        {
            System.out.println("Someone pressed enter key");
        }
    }
});

私がやりたいのは、スピナーが選択されているときにユーザーがEnterキーを押すたびに、ボタンが実行するコマンドを実行したいということです。はい、アクションボタンの機能を単純に持つことができ、ユーザーがEnterキーを押したときに同じ機能を実行できることを理解しています。Swing のコンポーネントが相互にアクションを送信できるかどうか、およびプログラミングの正しい方法ではなく、それを行う方法に興味があるため、これを質問しています。

4

3 に答える 3

3

はい、アクションボタンの機能を単純に持つことができ、ユーザーがEnterキーを押したときに同じ機能を実行できることを理解しています。Swing のコンポーネントが相互にアクションを送信できるかどうか、およびプログラミングの正しい方法ではなく、その方法について知りたいので、これを尋ねています。

関数を実行することが正しい方法であるとほのめかしている場合、それは問題を解決するための最良の方法ではないことをお勧めします。

正しい方法は、呼び出すメソッドではなく、アクションを共有することです。

このソリューションでは、KeyListener をまったく使用しないでください。一般的な解決策は、キー バインドを使用することです。詳細については、キーバインディングの使用方法に関する Swing チュートリアルを参照してください。

ただし、あなたの場合は、ActionListener を共有するだけで済むため、少し簡単になります。

ActionListener al = new ActionListner() {...}

JTextField editor = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
editor.addActionListener(al);
button.addActionListener(al);
于 2013-06-28T15:11:03.973 に答える
1
spn_.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_ENTER)
        {
            btn_.doClick(); // fires the actionPerfomed on the button
        }
    }
});
于 2013-06-28T13:58:11.423 に答える
1

JButton のdoClick()メソッドを使用します。

btn_.doClick()

以下の範囲内keyPressed

spn_.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_ENTER)
        {
            btn_.doClick()
        }
    }
});

オラクルのdoClick()ドキュメントで指定されている方法:

プログラムで「クリック」を実行します。これは、ユーザーがボタンを押して離した場合と同じことを行います。

于 2013-06-28T13:56:16.323 に答える