JTabbedPane动态标签

时间:2016-10-26 16:03:40

标签: java swing jtabbedpane

我正在创建一种记事本,他有一个行计数器窗格,告诉我行的位置(当我按Enter键时它会递增)和另一个行和列计数器窗格(就像Notepad ++一样)。我想动态添加标签,所以每当我选择" New"选项,将创建一个新选项卡。默认情况下,我的记事本首先打开一个标签,就像Notepad ++一样。让我们调用此选项卡,TAB1

  • 如果我按"新"它将创建一个新选项卡,让我们称之为TAB2。现在我们有TAB1和TAB2
  • 如果我再按一下" New"它将创建一个新标签,我们称之为TAB3,所以我现在将有3个标签:TAB1,TAB2,TAB3。

现在,如果我想选择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);
    }

1 个答案:

答案 0 :(得分:2)

thisTextArea.setText(thisTextArea.getText()+"\n");

您“新行”操作不正确。您正在硬编码要更改的文本区域变量。

相反,您的Action应该扩展TextAction(而不是AbstractAction)。然后,您可以使用getFocusedComponent()的{​​{1}}方法获取当前具有焦点的文本区域。

有关简单示例,请查看:Clear current FocusOwner (jTextfield)

此外,这不是向文本字段添加新行字符的方法。不要使用setText()方法。相反,您应该使用TextAction方法。

虽然真正的问题是你为什么要创建这个动作?当您按Enter键时,在文本区域中添加换行符是默认行为。