package ceshi;
import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class Test extends JFrame{
public JButton jButton = new JButton("按钮");
public Test() {
init();
}
public void init() {
//敲击键盘,在控制台输出信息
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
});
//按下按钮,在控制台输出信息
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("接收到按钮事件...");
}
});
setLayout(null);
jButton.setBounds(100,100,60,30);
add(jButton);
setVisible(true);
setResizable(true);
setBounds(400,400,400,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("测试");
}
public static void main(String[] args) {
Test test = new Test();
}
}如以上代码,给按钮注册了事件,也注册了键盘事件。
但是,点击按钮控制台会输出信息,敲击键盘则毫无反应。
如果把add(jButton);注释掉得话,就可以接收到键盘事件了。
这是为什么啊?!
System.out.println(e.getKeyChar());
}
你这个没有说监听那个按键呀???是把
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
});后面加上一行this.setFocusable(true);
宝马哥这是个方法,但是一旦button获得焦点后,frame又无法得到焦点从而响应键盘事件了。不如,jbutton.setFocusable(false);
这样按钮也能点,frame也能响应键盘。应该有更好的方法,等待牛人。
import java.awt.event.*;import javax.swing.*;public class Test extends JFrame{
public JButton jButton = new JButton("按钮");
public Test() {
init();
}
public void init() {
//敲击键盘,在控制台输出信息
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
});
//this.setFocusable(true);
//按下按钮,在控制台输出信息
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("接收到按钮事件...");
}
});
setLayout(null);
jButton.setBounds(100,100,60,30);
add(jButton);
jButton.setFocusable(false);
setVisible(true);
setResizable(true);
setBounds(400,400,400,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("测试");
}
public static void main(String[] args) {
Test test = new Test();
}
}
谁解决了,把代码发上来好吗?谢谢了啊。