我正在做一個涉及JPanel中的鼠標和鍵監聽器的小項目。不幸的是,當我使用鼠標/鍵盤時,沒有任何方法被調用。我以前曾使用過JPanels/JFrame/JApplet和JComponents。代碼片段如下所示:MouseListener/KeyListener不工作(JPanel)
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個空格。要獲得更多編輯幫助,請單擊[?]工具欄圖標。 我不知道如何解決它。有時候我把所有的東西都放在代碼裏面,它仍然不會提交。
謝謝。這是否也適用於JComponents?就像每個JLabel,JTextField等一樣?或者,如果我將它們添加到面板中,它們都可以工作嗎?將在5分鐘內投票。 – GoldenLyfe
是的,唯一一個將會發射事件的'JComponent'是當時有'focus'的那個。 [如何編寫密鑰監聽器](http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html)和[如何編寫密鑰綁定](http://docs.oracle.com /javase/tutorial/uiswing/misc/keybinding.html)打破兩者之間的差異;這是非常微妙的,但在寫代碼之前值得你去抓。 –
@SeanConnolly請將你的回答作爲評論的一部分。應該避免使用KeyListeners(部分出於這個原因)支持KeyBindings – MadProgrammer