我有一个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();
}
答案 0 :(得分:1)
拖和下降。复制和粘贴。辅助功能输入方法。这种方法不合适有很多原因。
而是通过Document
限制内容。设置DocumentFilter
到AbstractDocument.setDocumentFilter
,这样您就不需要子类化或实现文档。
弹出窗口不适合用户体验。更微妙。不允许任何更多的角色会这样做(请不要发出嘟嘟声!)。可能会在twitter和stackoverflow中添加倒计时。
答案 1 :(得分:0)
测试当前大小+ 1是否达到边界,消耗该事件并显示消息框。 重要的是要让事件永远不会超出你的文本框!
答案 2 :(得分:0)
阅读Swing tutorial关于“文本组件功能”的部分,其中包含“实现文档过滤器”的部分,该部分完全符合您的要求。