簡體   English   中英

如何在JTextArea中按空格鍵后調用方法

[英]How to call a method after the space bar is pressed in a JTextArea

很抱歉這可能是一個簡單的問題,但是每次在JTextArea中按空格鍵時如何調用方法? 我已經嘗試將keylistener附加到文本區域,但我無法使其工作。 謝謝。

閱讀關於如何使用鍵綁定的Swing教程。

本教程有一些示例,您可以在論壇中找到大量其他示例。

當您創建要執行的自定義Action時,您將擴展TextAction。

JTextArea jt=new JTextArea();

jt.addKeyListener(new KeyListener(){ 

    public void keyPressed(KeyEvent ke){ 

         if(ae.getKeyCode()==KeyEvent.VK_SPACE){
              //call your method
         }
    }
});

雖然@camickr有一個很好的,簡單的解決方案,我已經投票,但是復雜但更徹底的選項是使用與JTextArea關聯的Document ,並覆蓋它的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。 贊成組合而不是繼承 。)不幸的是,它有點笨拙的一些演員,但這里是基本的代碼:

((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更簡單。 這取決於您的要求 - 在您的情況下,我認為您不關心他們是否復制和粘貼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM