简短版本:我在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作为有效输入?
答案 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 Bindings
将Action
添加到KeyStroke
。在Swing中,Enter键映射到Action以将换行符添加到Document中。查看Key Bindings以获取默认绑定列表。
如果需要,可以将Ctrl + J添加为另一个KeyStroke以添加换行符。该链接显示了如何通过以下方式添加另一个绑定:
虽然我仍然不明白这将如何帮助解决您的问题,因为您声明数据来自USB读卡器并在传输到文本区域之前进行了格式化。这就是为什么我们需要适当的代码来证明这个问题。