public class Board extends JPanel implements ActionListener{
Timer timer;
Tank tank = new Tank();
boolean boardset;
public Board(){
setBackground(Color.BLACK);
ImageIcon alien1ii = new ImageIcon(this.getClass().getResource("si_Alien1.png"));
Image alien1 = alien1ii.getImage();
ImageIcon alien2ii = new ImageIcon(this.getClass().getResource("si_Alien2.png"));
Image alien2 = alien2ii.getImage();
ImageIcon alien3ii = new ImageIcon(this.getClass().getResource("si_Alien3.png"));
Image alien3 = alien3ii.getImage();
timer = new Timer(5, this);
timer.start();
addKeyListener(new TAdapter());
JButton button = new JButton(new AbstractAction("hello2"){
@Override
public void actionPerformed(ActionEvent e){
boardset = false;
}
});
this.add(button);
//actual game
setFocusable(true);
setDoubleBuffered(true);
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.WHITE);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(tank.getTank(), tank.getx(), tank.getY(), this);
g2d.drawLine(0, (tank.getY()+25), 400, (tank.getY()+25));
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public class TAdapter extends KeyAdapter{
public void keyPressed(KeyEvent e){
tank.keyPressed(e);
System.out.println("pressedddddddddddddddddd");
}
public void keyReleased(KeyEvent e){
tank.keyReleased(e);
}
}
public void setBoardset(boolean x){
boardset = x;
}
public boolean getBoardset(){
return boardset;
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
tank.move();
}
}
在我看来,这应该是非常简单的,现在我使用这个print语句来查看类是否真的识别按键:public class TAdapter extends KeyAdapter{public void keyPressed(KeyEvent e){tank.keyPressed(e);system.out.println(“presseddddddddddddddddddddd”);}
但是,没有输出。所以我怀疑它根本无法识别任何击键。但我想不出为什么。如果有人有任何建议,我将不胜感激。显然,我有更多的代码可以共享,如果有人认为它对解决这个bug有用的话。
1)使用KeyBindings KeyListener有两个大问题,第一,你监听所有的键,第二,你必须有焦点和可聚焦。相反,KeyBinding你为一个键绑定,你不必在焦点上。
简单的例子:
AbstractAction escapeAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//code here example
((JComponent)e.getSource()).setVisible(Boolean.FALSE);
}};
String key = "ESCAPE";
KeyStroke keyStroke = KeyStroke.getKeyStroke(key);
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, key);
component.getActionMap().put(key, escapeAction);
可以使用这些JComponent常量
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
WHEN_FOCUSED
WHEN_IN_FOCUSED_WINDOW
public class Board extends JPanel implements ActionListener{
public class Board{
private JPanel panel;
private class MyActionListener implements ActionListener{
//code here
}
}
一个在设置了Keylistener或Keyadapter类并重写了keyPressed之后,另两个在程序中如何获得键盘响应呢?例如,假设我已经设置了Keyadapter类: 我将如何从那里开始,使它能够实际检测到它,并在我按w时显示字符串?没有任何方法,我可以在main方法中调用,使它开始检查,是吗?如果没有,JVM如何知道开始检查main中是否没有方法告诉它? 谢谢你抽出时间。
介绍 (Introduction) KeyAdapter类是一个用于接收键盘事件的抽象(适配器)类。 此类的所有方法都是空的。 此类是用于创建侦听器对象的便捷类。 类声明 以下是java.awt.event.KeyAdapter类的声明: public abstract class KeyAdapter extends Object implements KeyListener
介绍 (Introduction) KeyAdapter类是一个用于接收键盘事件的抽象(适配器)类。 此类的所有方法都是空的。 此类是用于创建侦听器对象的便捷类。 Class 声明 (Class Declaration) 以下是java.awt.event.KeyAdapter类的声明 - public abstract class KeyAdapter extends Object
我是一个编程初学者,我一直在做一个小项目,著名的游戏叫做俄罗斯方块,我遇到了这个小问题,我希望你能帮助我解决这个问题。我导入了:和以便能够使用我的键盘玩游戏,但是当我扩展我创建的类以使用这些键时,它显示了一个错误!! 错误发生在这里,说: 类TAdapter扩展keyAdapter{//第二个发生在此处:keyAdapter不能//解析为类型public void keyPressed(keyEv
本文向大家介绍winforms 使用帮助类显示帮助,包括了winforms 使用帮助类显示帮助的使用技巧和注意事项,需要的朋友参考一下
地址 https://mirrors.ustc.edu.cn/ros/ 说明 机器人操作系统(ROS)的软件源镜像。 使用说明 Ubuntu, Debian 将软件源添加至系统: sudo sh -c 'echo "deb https://mirrors.ustc.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.