Java JTextArea的输入
例如,如果输入的字符不是Java JTextArea的输入,java,swing,jtextarea,keylistener,Java,Swing,Jtextarea,Keylistener,例如,如果输入的字符不是'x',是否有任何方法可以避免这种情况。而不是什么都不做。代码: main_text_area.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e1) {
'x'
,是否有任何方法可以避免这种情况。而不是什么都不做。代码:
main_text_area.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e1)
{
char c ='x';
if!((e1.getKeyChar() == c))
{
//Do nothing at all
}
}
public void keyReleased(KeyEvent e2)
{
}
对您已经在自己的问题中找到了答案。下面解释了原因。或者,您可以将其添加到
keyPressed()
,这在语义上与您的变体相同:
if(!(e1.getKeyChar() == 'x')); //Does nothing, notice the ';'!
else {
//Do something
}
为了让它什么都不做,你需要留下一个空的身体——你所做的就是一个例子。然后它符合标准,进入体内,什么也不做。是的您已经在自己的问题中找到了答案。下面解释了原因。或者,您可以将其添加到
keyPressed()
,这在语义上与您的变体相同:
if(!(e1.getKeyChar() == 'x')); //Does nothing, notice the ';'!
else {
//Do something
}
为了让它什么都不做,你需要留下一个空的身体——你所做的就是一个例子。然后它满足标准,进入主体内部,什么也不做。您最好不要在Swing文本组件中使用KeyListener,因为这可能会干扰该组件的基本操作。此外,KeyListener不会对通过任何其他方式(如剪切和粘贴)添加或删除的文本产生任何影响。最好使用更高级别的侦听器 例如,如果您希望收到任何文本更改(输入或删除)的通知,则您需要使用DocumentListener,因为这将通知您文本的任何更改,无论是从键输入还是从剪切粘贴 另一方面,如果您想要过滤文本输入,甚至阻止某些文本输入,则将DocumentFilter附加到JTextArea的文档 例如,您可以在DocumentFilter中放置一个
字符串#replaceAll(…)
,用于从字符串中删除所有非X字符。regex“[^xX]”
可以很好地解决这个问题
e、 g
最好不要在Swing文本组件中使用KeyListener,因为这会干扰该组件的基本操作。此外,KeyListener不会对通过任何其他方式(如剪切和粘贴)添加或删除的文本产生任何影响。最好使用更高级别的侦听器 例如,如果您希望收到任何文本更改(输入或删除)的通知,则您需要使用DocumentListener,因为这将通知您文本的任何更改,无论是从键输入还是从剪切粘贴 另一方面,如果您想要过滤文本输入,甚至阻止某些文本输入,则将DocumentFilter附加到JTextArea的文档 例如,您可以在DocumentFilter中放置一个
字符串#replaceAll(…)
,用于从字符串中删除所有非X字符。regex“[^xX]”
可以很好地解决这个问题
e、 g
@谢谢。但这里实际需要的是,除x以外的所有其他键都应该是功能较少的。大多数Swing专家都不推荐这种方法。例如,剪切粘贴会完全失败。@user8谢谢。但是这里实际需要的是,除了x以外的所有其他键都应该是功能较少的。大多数Swing专家都不推荐这种方法。例如,剪切粘贴会完全失败。
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class XcharFilter extends DocumentFilter {
private static final String REGEX = "[^xX]";
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
throws BadLocationException {
string = string.replaceAll(REGEX, "");
super.insertString(fb, offset, string, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
text = text.replaceAll(REGEX, "");
super.replace(fb, offset, length, text, attrs);
}
}