1

私はJavaの学習を始めました。現在、キーリスナーを機能させようとしていますが、苦労しています。私のコードは以下です。匿名内部クラスの先頭にある最初の中かっこにエラーがあります。おそらく単純なものが欠けているので、どんな助けも役に立ちます。

public class Klistener extends JFrame {

    void Klistener()
    {
        JPanel c = new JPanel();
        c.setFocusTraversalKeysEnabled(true);
        this.add(c);
        c.addKeyListener(new KeyListener()
        {


            @Override
          public void keyTyped(KeyEvent e)
          {
              if(e.getKeyCode()==KeyEvent.VK_DOWN)
              {
                  System.out.print("hi");
              }
          }

        });
    }

    public static void main(String[] args)
    {
        Klistener a = new Klistener();
        JFrame b = new JFrame("hi");
        b.setVisible(true);
        b.setSize(500, 500);


        b.setLocation(500, 200);
        b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
4

4 に答える 4

3

の他の 2 つのメソッドの実装を提供するのを忘れていましたKeyListener。それをしたくない場合は、KeyAdapterの代わりに拡張しKeyListenerます。KeyAdapterのすべてのメソッドの空の実装を提供するKeyListenerため、実装するメソッドを選択して選択できます。

于 2012-09-04T00:02:51.677 に答える
3

KeyListenerは であるため、interface内部クラスはインターフェイスで宣言されているすべてのメソッドをオーバーライドする必要があります。インターフェイスは、次のメソッドを指定します。

public interface KeyListener extends EventListener {

    /**
     * Invoked when a key has been typed.
     * See the class description for {@link KeyEvent} for a definition of 
     * a key typed event.
     */
    public void keyTyped(KeyEvent e);

    /**
     * Invoked when a key has been pressed. 
     * See the class description for {@link KeyEvent} for a definition of 
     * a key pressed event.
     */
    public void keyPressed(KeyEvent e);

    /**
     * Invoked when a key has been released.
     * See the class description for {@link KeyEvent} for a definition of 
     * a key released event.
     */
    public void keyReleased(KeyEvent e);
}

より良い方法は、アダプター クラスを使用してキーボード イベントを受信することです。ここでは、すべてではなく、必要な特定のものをオーバーライドできます。KeyAdapter abstractmethod

また、 を初めて使用する場合はJava Swing、次のリンクが役立つ場合があります。

void Klistenerああ、クラスに という名前のメソッドがあることに気付きましたKlistenerconstructorメソッド自体ではなく、メソッドを作成しようとしていると思います。この場合は、constructors戻り値の型がないことに注意してください。役立つかもしれないさらに別のリンクを次に示します。

于 2012-09-04T00:03:22.330 に答える
2

あなたは非常に多くの間違いを抱えているので、私は始めるべきかどうかさえ知りません:

1)KeyListenerはインターフェースなので、すべてのメソッドを実装する必要があります。

2)KeyListenerパネルに追加しないで、あなたのに追加してくださいJFrame。匿名クラスを作成するか、この方法でそれを行うことができます

public class Klistener extends JFrame implements KeyListener{}

3)setSize()メソッド、呼び出しpack()setPreferredSize()メソッドの and をsetVisible(true)呼び出さず、コードの最後で呼び出します。

メイン メソッドは次のようになります。

  public static void main(String[] args){
    Klistener k = new Klistener();
    k.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    k.setLocationByPlatform(true);
    k.setPreferredSize(new Dimension(400,300));
    k.pack();
    k.setVisible(true);

  }
于 2012-09-04T00:15:06.513 に答える
1

いくつかの間違いがあります。ここに作業コードがあります(最小限の変更):

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Klistener extends JFrame {
public Klistener()
{
    JPanel c = new JPanel();
    c.setFocusTraversalKeysEnabled(true);       
    addKeyListener(new KeyListener()
    {


        @Override
        public void keyTyped(KeyEvent e){}

        @Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode()==KeyEvent.VK_DOWN)                
                        System.out.println("hi");
        }

        @Override
        public void keyReleased(KeyEvent e){}

    });

}
public static void main(String[] args)
{
    Klistener a = new Klistener();
    a.setSize(500, 500);
    a.setLocation(500, 200);
    a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    a.setVisible(true);

}
}
于 2012-09-04T00:22:02.703 に答える