由于本人应用的是NetBean,建立键盘事件的时候电脑会自动生成以下代码,只可读取不可修改。
jPanel1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jPanel1KeyPressed(evt);
}
});
以下是可以修改的部分。
private void jPanel1KeyPressed(java.awt.event.KeyEvent evt) {
}
请问高手,指点以下问题:
1.addKeyListener(..)用于jPanel和jFrame有什么区别?
2.以上代码是否只需要处理jPanel1KeyPressed(..)即可?为什么我在运行时没发现有什么反映呢?即使在jPanel1KeyPressed(..)中添加System.out.println("Something");也没有任何输出。
3.在网络上学习相关资料时听说Keydown/Keyup事件,是不是指的就是这个keyPressed/keyrelease?听说DirectInPut更好用,可以同时捕捉多个键盘事件,请问那个应该如何使用呢?谢谢指点!!!
jPanel1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jPanel1KeyPressed(evt);
}
});
以下是可以修改的部分。
private void jPanel1KeyPressed(java.awt.event.KeyEvent evt) {
}
请问高手,指点以下问题:
1.addKeyListener(..)用于jPanel和jFrame有什么区别?
2.以上代码是否只需要处理jPanel1KeyPressed(..)即可?为什么我在运行时没发现有什么反映呢?即使在jPanel1KeyPressed(..)中添加System.out.println("Something");也没有任何输出。
3.在网络上学习相关资料时听说Keydown/Keyup事件,是不是指的就是这个keyPressed/keyrelease?听说DirectInPut更好用,可以同时捕捉多个键盘事件,请问那个应该如何使用呢?谢谢指点!!!
楼主【thankyouforyourhelp】截止到2008-07-02 20:07:06的历史汇总数据(不包括此帖):
发帖的总数量:5 发帖的总分数:156
结贴的总数量:4 结贴的总分数:90
无满意结贴数:1 无满意结贴分:50
未结的帖子数:1 未结的总分数:66
结贴的百分比:80.00 % 结分的百分比:57.69 %
无满意结贴率:25.00 % 无满意结分率:55.56 %
楼主加油
2.JPanel好像不响应键盘事件,以前遇到这个问题,没解决了
3.不知道...没听说过
关于第二条不认同,因为我最常做的事情就是在JPanel上监听键盘事件你要JPanel监听到键盘事件,就要把焦点获得。具体方法为jp.graFoucusable();
2.如果没响应,那就是你的监听不到位(监听键盘事件一定要被监听对象获得焦点)
3.keyPressed是键下压的意思,keyrelease是键释放的意思,对于你说的Keydown/Keyup事件,在java里面没听说过,估计是别的语言的吧(c#之类的)
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;public class SimpleTest { /**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame();
JButton button = new JButton("Test");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("actionPerformed");
}
});
button.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("mousePressed");
}
});
final JPanel panel = new JPanel();
panel.add(button);
panel.setFocusable(true);
frame.getContentPane().add(panel);
panel.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) {
System.out.println("panel keyPressed");
} public void keyReleased(KeyEvent e) {
System.out.println("panel keyReleased");
} public void keyTyped(KeyEvent e) {
System.out.println("panel keyTyped");
}
});
panel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
((JComponent) e.getSource()).grabFocus();
}
});
frame.setVisible(true);
frame.setSize(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2.应该是缺少焦点,这样“panel.setFocusable(true); ”应该可以响应panel上的事件。
3.Keydown/Keyup事件好象是比较早的语言,现在好象功能被取消了。最后请高手指点下DirectInPut的使用,谢谢了!