请问高手关于java的事件机制问题,请教下。着急啊!@ JPanel 没有获得焦点,按键没有被JPanel监听在setVisible(true);后面加一句jp1.requestFocus();就行了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 或者把keyListener加到JFrame上jp1.addKeyListener(this);改成addKeyListener(this); 请问为什么?如果我在主类外新建一个类继承了JPanel后,然后实现了键盘的事件监听,这样编写不用加Jpanel焦点,能够实现键盘按下的效果。你试试。 只继承JPanel不可能主动获得焦点,贴出你的代码看一下 public class test5 extends JFrame{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub test5 t=new test5(); } public test5() { tupian t1=new tupian(); //将面板加入到窗体。 this.add(t1); this.addMouseListener(t1); //窗体是事件源,面板是事件的监听者。 this.addKeyListener(t1); this.setSize(500,500); this.setTitle("画图程序"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); this.setLocation(300,200); this.setVisible(true); }}class tupian extends JPanel implements KeyListener,MouseListener{ public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); g.fillRect(0, 0, 500, 200); } @Override public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub System.out.println("鼠标进入了JPanel"); } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub System.out.println("鼠标离开了JPanel"); } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent arg0) { // TODO Auto-generated method stub System.out.println(arg0.getKeyChar()+"键被按下"); } @Override public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } }请高手,看一下这部分代码,我运行后,能发生键盘按下事件。这段代码没有加入焦点,但是能运行,我现在是弄不清他的机制是什么?窗体类为什么必须要专门编写获取焦点才能发生键盘事件呢? this.addKeyListener(t1);这个的keyListener就是JPanel本身,所以可以 什么叫所以可以??上面头一段代码中的 jp1.addKeyListener(this);这个也没有错啊,jp1是事件源,this是事件的监听者,代码没有问题啊,鼠标事件都能监听成功,而且也没有写专门的焦点。怎么就key事件没有反应了呢? Swing问题,用过Netbeans的进来看看 如何显示选中的字符串,大虾指点下 java线程生产者消费者问题 菜鸟提问:如何在代码中列出网上邻居上的计算机? 关于判断字符串中的字符是汉字还是字母的问题? 请问该怎么运行这个HelloWorld 帮我调一下 各位老师 ,谢谢!!! 为什么两行的程序编译不过? 帮我解决一个小问题,谢谢大家。 使用Applet能不能实现基于浏览器的打印呢??? 线程的例子,有点不是很懂,大神们速度答疑一下! 关于java IO流中lineNumberReader类的getLineNumber()方法
jp1.addKeyListener(this);改成addKeyListener(this);
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
test5 t=new test5();
}
public test5()
{
tupian t1=new tupian(); //将面板加入到窗体。
this.add(t1);
this.addMouseListener(t1); //窗体是事件源,面板是事件的监听者。
this.addKeyListener(t1);
this.setSize(500,500);
this.setTitle("画图程序");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setLocation(300,200);
this.setVisible(true);
}
}
class tupian extends JPanel implements KeyListener,MouseListener
{
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.red);
g.fillRect(0, 0, 500, 200);
} @Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("鼠标进入了JPanel");
} @Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("鼠标离开了JPanel");
} @Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println(arg0.getKeyChar()+"键被按下");
} @Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
请高手,看一下这部分代码,我运行后,能发生键盘按下事件。这段代码没有加入焦点,但是能运行,我现在是弄不清他的机制是什么?窗体类为什么必须要专门编写获取焦点才能发生键盘事件呢?
这个的keyListener就是JPanel本身,所以可以