怎么使JButton不影响KeyListener

软件和网站开发以及相关技术探讨
回复
bank_boy
帖子: 7
注册时间: 2013-03-30 13:26
系统: ubuntu12.10

怎么使JButton不影响KeyListener

#1

帖子 bank_boy » 2013-04-13 11:36

//如题

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BallDemo extends JFrame{
private BallMove ball=new BallMove(10);
private JButton jbRight=new JButton("Right");
private JButton jbLeft=new JButton("Left");
private JButton jbUp=new JButton("Up");
private JButton jbDown=new JButton("Down");
private ButtonListener listener=new ButtonListener();
public BallDemo(){

JPanel p=new JPanel(new GridLayout(1,4));
p.add(jbRight);
p.add(jbLeft);
p.add(jbUp);
p.add(jbDown);


add(ball,BorderLayout.CENTER);
add(p,BorderLayout.SOUTH);

jbRight.addActionListener(listener);
jbLeft.addActionListener(listener);
jbUp.addActionListener(listener);
jbDown.addActionListener(listener);
ball.setFocusable(true);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame=new BallDemo();
frame.setSize(200,200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

}

private class BallMove extends JPanel{
private int radius;
private int x=100;
private int y=100;
public BallMove(){
this(0);
}

public BallMove(int radius){
this.radius=radius;
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_UP:Up();break;
case KeyEvent.VK_DOWN:Down();break;
case KeyEvent.VK_LEFT:Left();break;
case KeyEvent.VK_RIGHT:Right();break;
default:break;
}
}
});

}

protected void paintComponent(Graphics g){
super.paintComponent(g);

g.drawOval(x, y, 2*radius, 2*radius);
}

public void Right(){
this.x+=10;
repaint();
}
public void Left(){
this.x-=10;
repaint();
}

public void Up(){
this.y-=10;
repaint();
}
public void Down(){
this.y+=10;
repaint();
}
}
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jbRight)
ball.Right();
else if(e.getSource()==jbLeft)
ball.Left();
else if(e.getSource()==jbUp)
ball.Up();
else if(e.getSource()==jbDown)
ball.Down();
else ;
}
}

}
bank_boy
帖子: 7
注册时间: 2013-03-30 13:26
系统: ubuntu12.10

Re: 怎么使JButton不影响KeyListener

#2

帖子 bank_boy » 2013-04-13 11:38

点击JButton后,KeyListener不能再用了....怎么改才能使JButton和KeyListener并行使用呢?
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34

Re: 怎么使JButton不影响KeyListener

#3

帖子 needle » 2013-04-26 11:53

俄罗斯方块……

代码: 全选

jframe.getContentPane().requestFocus();
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
回复