小弟快疯了!!!快疯了!!!键盘事件啊!!! 本帖最后由 cyclovebritpop 于 2011-05-07 13:43:00 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 label要先设置可以得到焦点才可以。label.setFocusable(true) 是这样吗?可是还是不行啊 //改变按键设置 public void changeSettings(final JLabel label){ label.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent ex){ label.setForeground(Color.white); label.setFocusable(true); label.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ label.setText(String.valueOf(e.getKeyChar())); } }); } }); } java swing技术好长时间没有看过了,学习下 Java code //改变按键设置 public void changeSettings(final JLabel label){ label.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent ex){ label.setForeground(Color.white); label.setFocusable(true); label.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ label.setText(String.valueOf(e.getKeyChar())); } }); } }); }我觉得你不能将其(我标注出来的这里)定义为final,被定义为fianl的类不能再被继承,被定义为final 的方法不能被重写,被定义final 的变量经赋值后不能被改写,你这里将label定义为final的就以为着在运行过程中该label一旦调用构造方法初始化后就不能再被更改了,所以你再在后面做什么都不可能了, 应该使用 label.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ label.setText(""+e.getKeyChar()); }}); 还是不行我之前试过只有一个label的时候就是可以的,现在不止一个label,然后就没有效果了。 import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Example { public static void main(final String[] args){ EventQueue.invokeLater(new Runnable(){ @Override public void run(){ JFrame frame = new JFrame("Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.getContentPane().add(makeJLabel("Center")); frame.getContentPane().add(makeJLabel("SOUTH"),BorderLayout.SOUTH); frame.getContentPane().add(makeJLabel("NORTH"),BorderLayout.NORTH); frame.getContentPane().add(makeJLabel("WEST"),BorderLayout.WEST); frame.getContentPane().add(makeJLabel("EAST"),BorderLayout.EAST); frame.pack(); frame.setVisible(true); } }); } static JLabel makeJLabel(String text){ final JLabel label = new JLabel(text); label.setFocusable(true); label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); label.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ label.requestFocusInWindow(); } }); label.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ //final JLabel label = (JLabel)e.getComponent(); label.setText(""+e.getKeyChar()); } }); label.addFocusListener(new FocusListener(){ public void focusGained(FocusEvent e){ label.setBorder(BorderFactory.createLineBorder(Color.BLUE,5)); } public void focusLost(FocusEvent e){ label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } }); return label; }} 鼠标点击JLabel不会切换焦点、使用TAB才行。按TAB切换焦点到JLabel上就可以了。 回复12楼:如果我想在键盘上按的不止是字母,还有其他的键应该怎么办?比如说我按回车键,能让它显示Enter么 public void keyTyped(KeyEvent e){ if(Character.isISOControl(e.getKeyChar())){ label.setText(KeyEvent.getKeyText(e.getKeyChar())); } else { label.setText(""+e.getKeyChar()); } }虽然能工作,可我也不能理解KeyEvent的getKeyText方法。 谁有JavaMail API 中文帮助文档、 chm格式的。。 Mssql jdbc data truncaton 如何实现报错精确到某一列? 关于Hibernian3操作oracle数据库实体类问题 一个程序的编写 关于子类对象创建时,父类也创建了对象么 日期格式比较大小 求助一行代码 关于路径的问题 我想把Java源码编译本地的exe,因为用jvm太慢了,但是不知用啥编译器? 哪里有Java函数手册DOWMLOAD? java急!急!急!急! 看帖见一正则表达式,小弟不解,求教各位大家!
label.setFocusable(true)
public void changeSettings(final JLabel label){
label.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent ex){
label.setForeground(Color.white);
label.setFocusable(true);
label.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
label.setText(String.valueOf(e.getKeyChar()));
}
});
}
});
}
//改变按键设置
public void changeSettings(final JLabel label){
label.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent ex){
label.setForeground(Color.white);
label.setFocusable(true);
label.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
label.setText(String.valueOf(e.getKeyChar()));
}
});
}
});
}
我觉得你不能将其(我标注出来的这里)定义为final,被定义为fianl的类不能再被继承,被定义为final 的方法不能被重写,被定义final 的变量经赋值后不能被改写,你这里将label定义为final的就以为着在运行过程中该label一旦调用构造方法初始化后就不能再被更改了,所以你再在后面做什么都不可能了,
label.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
label.setText(""+e.getKeyChar());
}
});
我之前试过只有一个label的时候就是可以的,现在不止一个label,然后就没有效果了。
import java.awt.event.*;
import javax.swing.*;public class Example {
public static void main(final String[] args){
EventQueue.invokeLater(new Runnable(){
@Override public void run(){
JFrame frame = new JFrame("Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.getContentPane().add(makeJLabel("Center"));
frame.getContentPane().add(makeJLabel("SOUTH"),BorderLayout.SOUTH);
frame.getContentPane().add(makeJLabel("NORTH"),BorderLayout.NORTH);
frame.getContentPane().add(makeJLabel("WEST"),BorderLayout.WEST);
frame.getContentPane().add(makeJLabel("EAST"),BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
}
});
} static JLabel makeJLabel(String text){
final JLabel label = new JLabel(text);
label.setFocusable(true);
label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
label.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
label.requestFocusInWindow();
}
});
label.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
//final JLabel label = (JLabel)e.getComponent();
label.setText(""+e.getKeyChar());
}
});
label.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e){
label.setBorder(BorderFactory.createLineBorder(Color.BLUE,5));
}
public void focusLost(FocusEvent e){
label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
}
});
return label;
}
}
按TAB切换焦点到JLabel上就可以了。
如果我想在键盘上按的不止是字母,还有其他的键应该怎么办?
比如说我按回车键,能让它显示Enter么
if(Character.isISOControl(e.getKeyChar())){
label.setText(KeyEvent.getKeyText(e.getKeyChar()));
} else {
label.setText(""+e.getKeyChar());
}
}
虽然能工作,可我也不能理解KeyEvent的getKeyText方法。