我有一个带有KeyListener的JTextField。在keyPressed里面我检查是否输入了被按下的键。在此之后,我想在内部类中调用一个不同的事件处理程序(内部类只包含这个处理程序)。
这就是我所拥有的,但显然:new handler()似乎没有启动内部类处理程序。
关键事件处理程序:
public void keyPressed(KeyEvent k) {
if(k.getKeyCode()==KeyEvent.VK_ENTER){
new handler();
}
}
内部类eventhandler:
public class handler implements ActionListener{
public void actionPerformed(ActionEvent e) {
int red = Integer.parseInt(roodT.getText());
int groen = Integer.parseInt(groenT.getText());
int blauw = Integer.parseInt(blauwT.getText());
if(red>255){
red = 255;
} else if (red < 0){
red = 0;
}
if(groen>255){
groen = 255;
} else if (groen < 0){
groen = 0;
}
if(blauw>255){
blauw = 255;
} else if (blauw < 0){
blauw = 0;
}
inhoud.setBackground(new Color(red, groen, blauw));
}
}
这是我第一次在这里发帖,很抱歉,如果这个问题格式不正确。
答案 0 :(得分:2)
只需将ActionListener
直接附加到JTextField
即可。按下ENTER时将触发它。这是JTextField
。
供进一步参考:
KeyListener
附加到JTextComponent
。使用DocumentListener
和/或DocumentFilter
(new handler()).actionPerformed( new ActionEvent( ... ) );
来使代码“正常工作”答案 1 :(得分:2)
对于JTextField
,您可以直接将handler
添加到其中:
JTextField someField = new JTextField(20);
someField.addActionListener(new handler());
ActionListener
会在ENTER
时自动触发 - 按下。
对于所有JTextComponent
,请使用KeyListener
和DocumentListener
,而不是DocumentFilter
。
其他JComponent
使用Swing KeyBindings。
在所有情况下,请远离KeyListener
这是一个低级API。
答案 2 :(得分:-1)
public void keyPressed(KeyEvent k) {
if(k.getKeyCode()==KeyEvent.VK_ENTER){
new handler().**actionPerformed(k)**;
}
}
你忘了给actionPerformed打电话。