很抱歉这可能是一个简单的问题,但是每次在JTextArea中按空格键时如何调用方法?我已经尝试将keylistener附加到文本区域,但我无法使其工作。感谢。
答案 0 :(得分:6)
答案 1 :(得分:4)
JTextArea jt=new JTextArea();
jt.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent ke){
if(ae.getKeyCode()==KeyEvent.VK_SPACE){
//call your method
}
}
});
答案 2 :(得分:0)
虽然@camickr有一个很好的,简单的解决方案我已经投票,但是复杂但更彻底的选项是使用与Document
相关联的JTextArea
,并覆盖它insertString()
方法。有时您已经这样做了,例如,为了防止字母被添加到数字字段。 KeyBinding的优势在于它还可以在用户复制并粘贴到JTextArea时捕获。因此,如果用户将“foo bar”复制并粘贴到该区域,KeyBinding将无法捕获(我很确定,我在这里错了吗?)并且Document技术将会。例如,非常示意性地:
@Override
public void insertString(int offset, String str, AttributeSet a) throws BadLocationException {
if (str.contains(" "))
callMySpecialSpaceMethod();
super.insertString(offset, str, a);
}
正如@camickr所指出的,不是直接子类化和重写Document.insertString(),而是可以设置它的DocumentFilter。 (favor Composition over Inheritance。)不幸的是,它有些笨重,但这里是基本代码:
((AbstractDocument)myTextArea.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int offset, String str, AttributeSet a) throws BadLocationException {
if (str.contains(" "))
callMySpecialSpaceMethod();
fb.insertString(offset, str, a);
}
});
这是KeyBinding的更多工作,除非你真的需要这么彻底,或者你已经出于另一个原因这样做了,KeyBinding更简单。这取决于您的要求 - 在您的情况下,我认为您不关心它们是否复制和粘贴。