JTextArea不接受换行键盘输入

时间:2018-03-05 16:04:37

标签: java swing

简短版本:我在Java 1.8应用程序中有一个JTextArea小部件,在Windows上不接受alt + 0010(换行符)或CTRL + J(也作为换行符)作为输入。键盘上的返回键虽然添加了换行符。我需要它从键盘接受ASCII字符10并将其视为新行。使用setText()之类的字符串调用"This is my newline\ntest case."方法正是我所期望的,并在\n出现的地方添加换行符。

长版本:我正在通过USB扫描仪读取PDF417二维条码,该扫描仪通过换行符(0x10)格式发送文本。如果我使用扫描仪读取条形码,并使用记事本接受输入,则换行字符会正确呈现。我可以让其他系统验证newline char是否来自输入,但JTextArea只是忽略它。

演示它的最简单方法(不上传整个骨架项目)是将JTextArea添加到应用程序,运行它,然后在文本区域内点击ctrl + J以尝试添加换行符。然后遍历JTextArea的内容:

private void jButton2MouseClicked(java.awt.event.MouseEvent evt) { 
    //jtxtData is a JTextArea object
    String data = jtxtData.getText(); 
    for(int i = 0; i < data.length(); i++) { 
        System.out.println(data.charAt(i) + ": " + (int)data.charAt(i));
    }

将显示ASCII 10的任何内容。

我知道如何让JTextArea(或任何其他Swing小部件)从键盘接受0x10作为有效输入?

2 个答案:

答案 0 :(得分:0)

所以&#34; \ n&#34;等于10.

    char c = 10;
    String ten = "" + c;
    System.out.println(ten.equals("\n"));
    //true

首先,由于输入有效,您可以使用输入然后更新您的文本以获得正确的字符。

String text = textArea.getText().replace("\r\n", "\n");

您可以为alt键组合或ctrl键组合添加键侦听器。

KeyStroke ctrlj = KeyStroke.getKeyStroke('j', InputEvent.CTRL_DOWN_MASK);
Action insertEnter = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        textArea.append('\n');
    }
};

textArea.getInputMap().put(ctrlj, "insert enter");
textArea.getActionMap().put("insert enter", insertEnter);

这有点麻烦,但是应该让ctrl + j插入你的文本区域。

答案 1 :(得分:0)

  

在文本区域内按ctrl + J尝试添加换行符

CTRL + J对Swing来说并不特别。不确定为什么你认为它应该添加换行符。 Enter键用于在Swing中添加换行符。

Swing使用Key BindingsAction添加到KeyStroke。在Swing中,Enter键映射到Action以将换行符添加到Document中。查看Key Bindings以获取默认绑定列表。

如果需要,可以将Ctrl + J添加为另一个KeyStroke以添加换行符。该链接显示了如何通过以下方式添加另一个绑定:

  1. 与其他KeyStroke共享动作
  2. 将动作名称绑定到KeyStroke
  3. 虽然我仍然不明白这将如何帮助解决您的问题,因为您声明数据来自USB读卡器并在传输到文本区域之前进行了格式化。这就是为什么我们需要适当的代码来证明这个问题。