5

JPanel でマウスとキー リスナーを含む小さなプロジェクトを行っています。残念ながら、マウス/キーボードを使用すると、どのメソッドも呼び出されません。以前、JPanels/JFrame/JApplet および JComponents を使用したことがあります。コード スニペットを以下に示します。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.util.Scanner;

public class Hello extends JPanel implements KeyListener, MouseListener{
    JPanel panel = new JPanel();
    JFrame frame = new JFrame();
    public Hello(){
        addKeyListener(this);
        addMouseListener(this);
    }
    public static void main(String [] args){
        Hello play = new Hello();
        play.setPanel();
    }
    public void setPanel(){
        panel.setLayout(null);
        frame.add(panel);
        frame.setLayout(null);
        panel.setBounds(0,0,100,100);
        frame.setVisible(true);
        panel.setVisible(true);
        panel.setFocusable(true);
        frame.setSize(100,100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void keyTyped(KeyEvent evt){
        System.out.println("keytyped");
    }
    public void keyPressed(KeyEvent evt){
        System.out.print("keypressed");
    }
    public void keyReleased(KeyEvent evt){
        System.out.println("keyreleased");
    }
    public void mousePressed(MouseEvent evt){
        System.out.println("mousepressed");
    }
    public void mouseReleased(MouseEvent evt){
        System.out.println("mousereleased");
    }
    public void mouseClicked(MouseEvent evt){
        System.out.println("mouseclicked");
    }
    public void mouseEntered(MouseEvent evt){
        System.out.println("mousenentered");
    }
    public void mouseExited(MouseEvent evt){
        System.out.println("mouseexited");
    }
}

トピック外: エラーが発生し続けます あなたの投稿には、コードとして適切にフォーマットされていないコードが含まれているようです。コード ツールバー ボタンまたは CTRL+K キーボード ショートカットを使用して、すべてのコードを 4 つのスペースでインデントしてください。編集の詳細については、[?] ツールバー アイコンをクリックしてください。修正方法がわかりません。すべてをコードに入れても、まだ送信されないことがあります。

4

3 に答える 3

12

JFrame の Java KeyListener が応答しない をご覧ください。.

あなたが聞きたいすべてのためにあなたKeyListenerとを登録する必要があります:MouseListenerJComponent

public Hello() {
    addKeyListener(this);
    addMouseListener(this);
    panel.addKeyListener(this);
    panel.addMouseListener(this);
    frame.addKeyListener(this);
    frame.addMouseListener(this);
}

編集:
キーとマウスのイベントはJComponent、その時点でフォーカスがある からのみ発生します。このため、KeyBindings が KeyListeners に有利である可能性があるというコンセンサスがあるようです。ただし、この 2 つは用途があり、厳格なルールはありません。「キー リスナーの書き方」と「キー バインディングの書き方」を読めば要点が理解できます。

于 2012-12-29T20:51:57.590 に答える
2

KeyListenerswithJPanelの使用は避け、代わりにKeyBindingsを使用してください。JPanelはフォーカスを得ることができないため、 と対話できませんKeyEvents。を使用KeyBindingsすると、コンポーネントにフォーカスがない場合でも、Action を KeyStroke にマップできます。

于 2012-12-29T20:53:39.093 に答える
1

代わりにこれを試してください:

 panel.addKeyListener(this);
 panel.addMouseListener(this);

聞きたいすべてのコンポーネントにリスナーを追加する必要があります。

于 2012-12-29T20:50:35.617 に答える