javaswing绑定键盘事件窗口按下z键出现一个按钮为什么事件绑定不上

2114772318 2019-06-08 09:08:26
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PlaneAndBullet implements Runnable{
public static void main(String[] args) {
new PlaneAndBullet().MyJFrame();

}
JButton jbt;
JButton jbt2;
void MyJFrame(){
JFrame jf=new JFrame("打飞机");
jf.setLayout(null);

BackGround backGround=new BackGround();

jf.setSize(500,300);
jf.setLocationRelativeTo(null);

ImageIcon imageIcon=new ImageIcon("fj.jpg");
jbt=new JButton(imageIcon);
jbt.setBounds(200,200,50,30);
jf.add(jbt);

int jbt_x=jbt.getX();
int jbt_y=jbt.getY();

jbt.setEnabled(true);
System.out.println(1);
jbt.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
System.out.println(2);
int jbt_x=jbt.getX();
if(e.getKeyChar()=='a'){
System.out.println(3);
run();

}
}
});
System.out.println(5);

JButton jbt3=new JButton("飞机");
jbt3.setBounds(20,20,40,20);
jf.add(jbt3);




jf.requestFocus();

System.out.println(2000);
jf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
System.out.println(90);
if(e.getKeyChar()=='z'){
jbt2=new JButton("子弹");
jbt2.setBounds(200,20,25,15);
jf.add(jbt2);
jf.repaint();
System.out.println(900000);
}
}
});


backGround.setBounds(0,0,500,300);
jf.add(backGround);
backGround.setPreferredSize(new Dimension(200,200));

/*ImageIcon imageIcon2=new ImageIcon("bj.jpg");
JLabel imgLabel=new JLabel(imageIcon2);
jf.getLayeredPane().add(imgLabel,new Integer(Integer.MIN_VALUE));
imgLabel.setBounds(0,0,imageIcon2.getIconWidth(),imageIcon2.getIconHeight());
JPanel jPanel=(JPanel)jf.getContentPane();
jPanel.setOpaque(false);*/

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}

public void run(){
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(4);
System.out.println(jbt);
jbt.setLocation(jbt.getX()-10,jbt.getY());
jbt2.setLocation(jbt2.getX()-10,jbt2.getY());
jbt.repaint();
}
}
}
class BackGround extends Canvas{
public void paint(Graphics g){
BufferedImage bufferedImage=new BufferedImage(500,500,BufferedImage.TYPE_INT_RGB);
try {
bufferedImage=ImageIO.read(new FileInputStream("bj.jpg"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
g.drawImage(bufferedImage,0,0,null);
}
}
...全文
151 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2019-06-13
  • 打赏
  • 举报
回复
一般不会把监听器直接绑在jframe上会有很多问题,先插入一个容器jpanel把监听器加在jpanel上吧。
2114772318 2019-06-12
  • 打赏
  • 举报
回复
这里有一个失去焦点的问题,要在需要绑定事件的控件上获得焦点 ps:setFocusable()方法要放在setvisible()方法前面,requestFocus()方法要放在setVisible()方法后面

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧