gpt4 book ai didi

java - JTabbedPane 动态选项卡

转载 作者:行者123 更新时间:2023-12-02 03:16:10 25 4
gpt4 key购买 nike

我正在创建一种记事本,它有一个用于行计数器的 Pane ,它告诉我行的位置(当我按 Enter 时它会增加),另一个用于行和列计数器的 Pane (就像 Notepad++ 一样)。我想动态添加选项卡,因此每次选择“新建”选项时,都会创建一个新选项卡。默认情况下,我的记事本一开始会打开一个选项卡,就像 Notepad++ 一样。我们将此选项卡称为 TAB1

  • 如果我按“新建”,它将创建一个新选项卡,我们将其称为 TAB2。现在我们有 TAB1 和 TAB2
  • 如果我再次按“新建”,它将创建一个新选项卡,我们将其命名为 TAB3,因此我现在将有 3 个选项卡:TAB1、TAB2、TAB3。

现在,如果我想选择 TAB2 来编辑其中的内容,这就是我的程序无法正常工作的点,因为如果我想按 Enter 换行,它不会在 TAB2 中添加新行,它将在 TAB3 中添加一个新行。我该如何解决这个问题?

这是 ActionListener ,我在其中说明如果从菜单栏中按“新建”会发生什么。 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");

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

相反,您的Action应该扩展TextAction(而不是AbstractAction)。然后,您可以使用 TextActiongetFocusedComponent() 方法来获取当前获得焦点的文本区域。

查看一个简单的示例:Clear current FocusOwner (jTextfield)

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

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

关于java - JTabbedPane 动态选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40267083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com