【发布时间】:2013-05-31 10:18:19
【问题描述】:
我有一个具有以下节点布局的 JavaFX 应用程序:
- 拆分窗格
- 文本区域
- 拆分窗格
- 选项卡窗格
- 选项卡窗格
示例代码:
SplitPane topBottomSplitPane = new SplitPane();
TextArea displayTextArea = new TextArea();
SplitPane leftRightSplitPane = new SplitPane();
topBottomSplitPane.getItems().addAll(displayTextArea, leftRightSplitPane);
TabPane leftTabPane = new TabPane();
TabPane rightTabPane = new TabPane();
leftRightSplitPane.getItems().addAll(leftTabPane, rightTabPane);
TextArea,displayTextArea,是一个不可编辑的文本区域,它显示一些文本数据,具体取决于两个 TabPanes(leftTabPane 和 rightTabPane)内打开的 Tab 对象中存在的数据。 TabPane 的 SelectionModel 是单数的,因此每个 TabPane 一次只能选择一个选项卡。
我的限制之一是只有一个打开的 Tab 对象数据应该影响 displayTextArea 的文本。当只有一个 TabPane 对象时,这很容易实现,方法是设置 OnSelectionChanged EventHandler 并使用 isSelected() 来确定选择的更改是进入还是退出选择。并且选定的选项卡将是影响 displayTextArea 的选项卡。
当有两个 TabPanes 时,我希望内容节点当前具有焦点的 Tab,例如 TextField 或用户正在输入将影响 displayTextArea 文本的数据的表单。从用户的角度来看,他们将单击 TabPanes 中打开的选项卡,而他们最后一次单击的选项卡将影响 displayTextArea。但这就是我撞墙的地方。
尝试和失败的方法:
设置某种侦听器,以便在焦点从一个选项卡的内容节点更改为另一个选项卡的内容节点时收到通知,无论它们位于哪个 TabPane,然后相应地更新 displayTextArea。 - 没有 AddFocusListener 方法,我不确定如何使用可用的面向焦点的方法和功能来实现此行为。
在多个 TabPanes 之间的任意时间强制只选择 1 个选项卡,并坚持使用上述 OnSelectionChanged EventHandler 方法。 - 我不知道从哪里开始,也找不到任何东西。
在question 中,有一个主题是将焦点更改为选项卡内容节点中的 TextField 对象,但我无法从该帖子中获取任何对我的目的有用的内容。
我迷路了,不知道如何实现这个显示的必要功能。
【问题讨论】:
标签: tabs event-handling focus javafx-2