JTabbedPane 动态标签
JTabbedPane dynamically tabs
我正在创建一种记事本,它有一个行计数器窗格告诉我行的位置(当我按 Enter 时它会增加)和另一个行和列计数器窗格(就像 Notepad++ 一样)。我想动态添加选项卡,所以每次我 select "New" 选项时,都会创建一个新选项卡。默认情况下,我的记事本从打开一个选项卡开始,就像 Notepad++ 一样。让我们将此选项卡命名为 TAB1
- 如果我按 "New" 它将创建一个新选项卡,我们称之为 TAB2。现在我们有 TAB1 和 TAB2
- 如果我再次按下 "New" 它将创建一个新标签,我们称之为 TAB3,所以我现在将有 3 个标签:TAB1、TAB2、TAB3。
现在如果我想 select TAB2 编辑里面的东西,这就是我的程序不能正常工作的地方,因为如果我想按回车键换行,它不会在 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);
}
thisTextArea.setText(thisTextArea.getText()+"\n");
你"new line"操作不正确。您正在对要更改的文本区域变量进行硬编码。
相反,您的 Action
应该扩展 TextAction
(而不是 AbstractAction)。然后可以使用TextAction
的getFocusedComponent()
方法获取当前获得焦点的文本区域。
查看一个简单示例:
此外,这不是向文本字段添加换行符的方法。不要使用 setText() 方法。相反,您应该使用 append(...)
方法。
尽管真正的问题是您为什么要创建此操作?向文本区域添加换行符是按 Enter 键时的默认行为。
我正在创建一种记事本,它有一个行计数器窗格告诉我行的位置(当我按 Enter 时它会增加)和另一个行和列计数器窗格(就像 Notepad++ 一样)。我想动态添加选项卡,所以每次我 select "New" 选项时,都会创建一个新选项卡。默认情况下,我的记事本从打开一个选项卡开始,就像 Notepad++ 一样。让我们将此选项卡命名为 TAB1
- 如果我按 "New" 它将创建一个新选项卡,我们称之为 TAB2。现在我们有 TAB1 和 TAB2
- 如果我再次按下 "New" 它将创建一个新标签,我们称之为 TAB3,所以我现在将有 3 个标签:TAB1、TAB2、TAB3。
现在如果我想 select TAB2 编辑里面的东西,这就是我的程序不能正常工作的地方,因为如果我想按回车键换行,它不会在 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);
}
thisTextArea.setText(thisTextArea.getText()+"\n");
你"new line"操作不正确。您正在对要更改的文本区域变量进行硬编码。
相反,您的 Action
应该扩展 TextAction
(而不是 AbstractAction)。然后可以使用TextAction
的getFocusedComponent()
方法获取当前获得焦点的文本区域。
查看一个简单示例:
此外,这不是向文本字段添加换行符的方法。不要使用 setText() 方法。相反,您应该使用 append(...)
方法。
尽管真正的问题是您为什么要创建此操作?向文本区域添加换行符是按 Enter 键时的默认行为。