-3

私はJavaコードの助けが必要です私はJavaの初心者です。コードが機能することを確認するためだけにメッセージを表示したい文字を押したら、やりたいことです。特にキーリスナーとキーイベントにjavaxスイングライブラリを使用していますが、それが正しいかどうかわかりません。ここに私のコードがあります:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
public class KeyStrokeButton{
    public JFrame frame;
    public JPanel panel;
    public JButton btnfocus, btnrelease, btnwindow, btnancestor;
    public JTextField text;
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable(){
            public void run()
            {
                KeyStrokeButton mydesign = new KeyStrokeButton();
                mydesign.design();
            }
        });
    }

    public void design()
    {


        panel = new JPanel();
        panel.setLayout(null);

        frame = new JFrame("Keystroke Tutorials");
        frame.getContentPane().add(panel);
        frame.setSize(250, 250);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        btnfocus = new JButton("<html><center>Focus");
        btnfocus.setBounds(10, 10, 90, 80);
        panel.add(btnfocus);
        btnfocus.addKeyListener(new ClickPressed());


        btnrelease = new JButton("Release");
        btnrelease.setBounds(110, 10, 90, 80);
        panel.add(btnrelease);


        btnancestor = new JButton("Ancestor");
        btnancestor.setBounds(10, 100, 90, 80);
        panel.add(btnancestor);


        btnwindow = new JButton("Window");
        btnwindow.setBounds(110, 100, 90, 80);
        panel.add(btnwindow);
    }
    class ClickPressed implements KeyListener
    {
        public void KeyPressed(KeyEvent e)
        {
            //any code.
        }
    }
}

イベント用のコードをできる限り分離したいので、クラスを作成して読みやすくします。

4

4 に答える 4

6

KeyListenerこのコンテキストでは、現在のフォーカスに基づいています。つまり、重要なイベントは、現在フォーカスされているコンポーネントにのみ配信されます。

たとえば、3 つのボタンがあります。フォーカス ボタンは、フォーカスがあるときにのみキー イベントを受け取ります。他のコンポーネントにフォーカスがある場合、フォーカス ボタンはキー イベントを受け取りません。

一般的に言えば、KeyListeners は良い考えではありません。Key Bindings APIを使用する方がはるかに優れています

あなたが達成しようとしていることのより良い説明は、私たちをさらに助けるでしょう.

于 2012-08-14T00:48:56.957 に答える
4

あなたが投稿した内容のどこかに本当の疑問が潜んでいるかどうかはわかりません。しかし、あなたのコードから判断すると、ここにいくつかのポインタがあります:

これがあなたが始めるのに役立つことを願っています。

于 2012-08-14T00:47:27.533 に答える
4

Sujay の回答は、必要なすべての情報を提供しますが、重要なイベントをリッスンする簡単な例を次に示します。

起動後にこれを追加することで、JFrame にグローバル キー リスナーを追加できます。

KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher (new MyDispatcher());

次に、キー イベント ディスパッチャーを作成し、それにコードを追加する必要があります。

   private class MyDispatcher implements KeyEventDispatcher
    {
        @Override
        public boolean dispatchKeyEvent(KeyEvent e)
        {
            if (e.getKeyCode() == 38) //up key
            {
            //Do something when the up key is pressed
            System.out.println("The up key was pressed");
            }
            else if (e.getKeyCode() == 40) //down key
            {
                //Do something when the down key is pressed
                System.out.println("The down key was pressed");
            }
            return false;
        }
    }
于 2012-08-14T00:57:44.570 に答える
0

次のコードを試して、JFrame 内に KeyListener を作成してください。コードは、入力キーとエスケープ キーが押されたときに検出されるように設定されています。

import java.awt.event.KeyEvent;
import java.awt.event.ActionEvent;
import java.awt.event.KeyListener;

class KeyListener extends JFrame implements KeyListener {

@Override
public void keyReleased(KeyEvent e) {               // Required for      KeyListener override

}
@Override
public void keyTyped(KeyEvent e) {                  // Required for     KeyListener override

}
}
public KeyListener() {

addKeyListener(this);        // KeyListener added to JFrame to detect key strokes
setFocusable(true);          // Ensure JFrame can gain focus

}

public void keyPressed(KeyEvent e) {    // Code to handle when key pressed
int keyCode = e.getKeyCode();
switch( keyCode ) { 
case KeyEvent.VK_ENTER:          // Code to handle when enter key pressed

    // ENTER CODE HERE

    break;
case KeyEvent.VK_ESCAPE:        // Code to handle when Escape key pressed
    // ENTER CODE HERE
    break;

} }

于 2015-07-26T16:37:48.937 に答える