我正在做一个涉及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个空格。有关更多编辑帮助,请单击[?]工具栏图标。 我不知道如何解决它。有时我把所有东西都放在代码中,它仍然无法提交。
答案 0 :(得分:10)
查看Java KeyListener for JFrame is being unresponsive?。
您需要为每个想要收听的KeyListener
注册MouseListener
和JComponent
:
public Hello() {
addKeyListener(this);
addMouseListener(this);
panel.addKeyListener(this);
panel.addMouseListener(this);
frame.addKeyListener(this);
frame.addMouseListener(this);
}
修改强>
键和鼠标事件仅从当时具有焦点的JComponent
触发。因此,似乎一致认为KeyBindings可能对KeyListeners有利。然而,这两者都有它们的应用,所以这里没有硬性规定。阅读“How to Write a Key Listener”和“How to Write a Key Binding”,您就会明白这一点。
答案 1 :(得分:2)
最好避免将KeyListeners
与JPanel
一起使用,而是使用KeyBindings。 JPanel
无法获得焦点,因此无法与KeyEvents
互动。使用KeyBindings
,即使组件没有焦点,也可以将Action映射到KeyStroke。
答案 2 :(得分:1)
请改为尝试:
panel.addKeyListener(this);
panel.addMouseListener(this);
您必须将侦听器添加到您想要侦听的每个组件。