Java面板中的组件如何键盘侦听 麻烦各位
importjava.awt.Color;importjava.awt.Frame;importjava.awt.Graphics;importjava.awt.Pane...
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class mover extends Frame{
public static void main(String ss[]){
mover s=new mover();
s.setVisible(true);
}
public Panel sf;
public class Node
{
int row;//行
int col;//列
}
public Node HB;
public mover(){
this.setBackground(new Color(202,234,72));
this.setBounds(0, 0, 500, 700);
this.setResizable(false);
this.setTitle("移动");
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent arg0) {
super.windowClosing(arg0);
System.exit(0);
}
});
paintp();
itinstart();
this.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
if(e.getKeyCode()==KeyEvent.VK_LEFT)
HB.col--;
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
HB.col++;
}
}
);
}
public void paintp(){
sf=new Panel(){
public void paint(Graphics g){
g.setColor(new Color(211,91,255));
g.fillRect(HB.col, HB.row, 60, 20);
}
};
sf.setBounds(50,50,400,500);
sf.setBackground(new Color(255,255,175));
this.setLayout(null);
this.add(sf);
}
public void itinstart(){
HB=new Node();
HB.col=170;
HB.row=470;
}
}
我想让这个面板中的紫色那个长方体在键盘侦听下可以用左右键控制移动 不知道为什么不行 如果直接在窗体中画就可以用键盘侦听,所以我想问在面板中键盘侦听是不是还要加点什么??我是初学者
那两位说的去做还是动不了。。。 展开
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class mover extends Frame{
public static void main(String ss[]){
mover s=new mover();
s.setVisible(true);
}
public Panel sf;
public class Node
{
int row;//行
int col;//列
}
public Node HB;
public mover(){
this.setBackground(new Color(202,234,72));
this.setBounds(0, 0, 500, 700);
this.setResizable(false);
this.setTitle("移动");
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent arg0) {
super.windowClosing(arg0);
System.exit(0);
}
});
paintp();
itinstart();
this.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
if(e.getKeyCode()==KeyEvent.VK_LEFT)
HB.col--;
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
HB.col++;
}
}
);
}
public void paintp(){
sf=new Panel(){
public void paint(Graphics g){
g.setColor(new Color(211,91,255));
g.fillRect(HB.col, HB.row, 60, 20);
}
};
sf.setBounds(50,50,400,500);
sf.setBackground(new Color(255,255,175));
this.setLayout(null);
this.add(sf);
}
public void itinstart(){
HB=new Node();
HB.col=170;
HB.row=470;
}
}
我想让这个面板中的紫色那个长方体在键盘侦听下可以用左右键控制移动 不知道为什么不行 如果直接在窗体中画就可以用键盘侦听,所以我想问在面板中键盘侦听是不是还要加点什么??我是初学者
那两位说的去做还是动不了。。。 展开
2个回答
展开全部
两个地方要改,一个addKeyListener的时候用sf,另一个最后要调用一下repaint。
修改后的部分如下:
sf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
HB.col--;
System.out.println("left key pressed");
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
HB.col++;
System.out.println("right key pressed");
}
sf.repaint();
}
});
我这边试过了可以动的呀。
你运行程序后,鼠标点一下界面,让焦点移进去。
修改后的部分如下:
sf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
HB.col--;
System.out.println("left key pressed");
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
HB.col++;
System.out.println("right key pressed");
}
sf.repaint();
}
});
我这边试过了可以动的呀。
你运行程序后,鼠标点一下界面,让焦点移进去。
展开全部
简单
解释:
this.addKeyListener(new KeyAdapter(){/// 代码省略了}
上面的代码是监听键盘的,
因为你使用的是 this.addKxxx..
而不是使用的 Panel sf.addKeyListerner() 所以错了
this 默认是你的类,也就是继承了Frame的mover ,
给谁加监听,谁才能听,你刚刚可能是copy的代码吧,加错了改改就可以
改成 sf.addKeyListener(new KeyAdapter(){///
绝对没错!分给我!
解释:
this.addKeyListener(new KeyAdapter(){/// 代码省略了}
上面的代码是监听键盘的,
因为你使用的是 this.addKxxx..
而不是使用的 Panel sf.addKeyListerner() 所以错了
this 默认是你的类,也就是继承了Frame的mover ,
给谁加监听,谁才能听,你刚刚可能是copy的代码吧,加错了改改就可以
改成 sf.addKeyListener(new KeyAdapter(){///
绝对没错!分给我!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询