限制JTextPane中消息中的字符数

时间:2010-07-15 10:49:57

标签: java

我有一个JTextPane,我想限制用户输入只有200个字符的邮件。所以,我有一个KeyListener,它侦听Keyevent并检查KeyEvent。如果消息超过200个字符,则会显示JOptionPane.showMessageDialog以向用户显示警告。这个位工作正常。

问题是,一旦显示警告并且用户点击“确定”,他就只能使用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();
       }

3 个答案:

答案 0 :(得分:1)

拖和下降。复制和粘贴。辅助功能输入方法。这种方法不合适有很多原因。

而是通过Document限制内容。设置DocumentFilterAbstractDocument.setDocumentFilter,这样您就不需要子类化或实现文档。

弹出窗口不适合用户体验。更微妙。不允许任何更多的角色会这样做(请不要发出嘟嘟声!)。可能会在twitter和stackoverflow中添加倒计时。

答案 1 :(得分:0)

测试当前大小+ 1是否达到边界,消耗该事件并显示消息框。 重要的是要让事件永远不会超出你的文本框!

答案 2 :(得分:0)

阅读Swing tutorial关于“文本组件功能”的部分,其中包含“实现文档过滤器”的部分,该部分完全符合您的要求。