2010-07-15 40 views
0

我有一個JTextPane,我想限制用戶只輸入200個字符的郵件。所以,我有一個KeyListener,它偵聽一個Keyevent並檢查一個KeyEvent。如果消息超過200個字符,則顯示JOptionPane.showMessageDialog以向用戶顯示警告。這一點工作正常。在JTextPane中限制郵件中的字符數

問題是,一旦顯示警告並且用戶點擊'OK',他就只能使用JTextPane中的Backspace鍵。我希望用戶能夠使用刪除鍵,箭頭鍵,移位鍵和控制鍵來選擇要刪除的文本。

任何人都可以提出一種方法來實現這?

// Add Key Listener to Send Field 
chatEditorKeyListener = new KeyAdapter() 
{ 
    public void keyPressed(KeyEvent e) 
    { 
     checkKeystroke(e); 
    } 
}; 



private void checkKeystroke(KeyEvent e) 
{ 
    //Check if enter or back space is entered 
    if(e.getKeyCode() != KeyEvent.VK_BACK_SPACE && e.getKeyCode() != KeyEvent.VK_ENTER) 
    { 
     // user is typing, so test the size as we go and report when we hit boundary 
     String text = messageBox.getText(); 
     if(text.length() > maxMessageSize) 
     { 
     showAlertBox(); 
     } 
    } 
    else if (e.getKeyCode() == KeyEvent.VK_ENTER) 
    { 
     //User sending the message 
     e.consume(); 
     String text = messageBox.getText(); 
     if(text.length() > maxMessageSize) 
     { 
      showAlertBox(); 
     } 

回答

0

請閱讀Swing tutorial關於「文本組件功能」的部分,其中包含「實施文檔過濾器」部分,該部分完全符合您的需求。

1

拖放。複製和粘貼。輔助功能輸入法。這種方法不合適的原因有很多。

而是通過Document限制內容。通過AbstractDocument.setDocumentFilter設置DocumentFilter,以便您不需要繼承或實現文檔。

彈出對用戶體驗來說並不好。更微妙。不允許任何更多的角色會做(請不要嗶嗶!)。可能添加一個倒計時爲twitter和stackoverflow做。

0

測試當前大小+ 1是否達到邊界,消耗事件並顯示消息框。 重要的是要消除事件,以免實際超大文本框!