Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextArea的输入_Java_Swing_Jtextarea_Keylistener - Fatal编程技术网

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);
    }
}