我正在创建一种记事本,他有一个行计数器窗格,告诉我行的位置(当我按Enter键时它会递增)和另一个行和列计数器窗格(就像Notepad ++一样)。我想动态添加标签,所以每当我选择" New"选项,将创建一个新选项卡。默认情况下,我的记事本首先打开一个标签,就像Notepad ++一样。让我们调用此选项卡,TAB1
现在,如果我想选择TAB2来编辑其中的内容,这就是我的程序无法正常工作的地方,因为如果我想按Enter键进入新行,它将不会在TAB2中添加新行,它将在TAB3中添加一个新行。我该如何解决这个问题?
这是ActionListener,我说如果按下" New"会发生什么?来自菜单栏。 state()是我进行布局的函数。
if(menuFileNew == e.getSource())
{
state();
Action newline = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
thisTextArea.setText(thisTextArea.getText()+"\n");
counter++;
thisLineCounterPane.setText(thisLineCounterPane.getText()+counter+"\n");
}
};
thisTextArea.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), NEWLINE);
thisTextArea.getActionMap().put(NEWLINE, newline);
}
答案 0 :(得分:2)
thisTextArea.setText(thisTextArea.getText()+"\n");
您“新行”操作不正确。您正在硬编码要更改的文本区域变量。
相反,您的Action
应该扩展TextAction
(而不是AbstractAction)。然后,您可以使用getFocusedComponent()
的{{1}}方法获取当前具有焦点的文本区域。
有关简单示例,请查看:Clear current FocusOwner (jTextfield)
此外,这不是向文本字段添加新行字符的方法。不要使用setText()方法。相反,您应该使用TextAction
方法。
虽然真正的问题是你为什么要创建这个动作?当您按Enter键时,在文本区域中添加换行符是默认行为。