【发布时间】:2017-12-24 14:37:48
【问题描述】:
我有视图并且有一个ListView 和一个Pane。我想将控制器添加为ListView 的项目,当我单击listView 的元素之一时,将Pane 的内容设置为其控制器内容,
例如,我有FruitsController 和VegetablesController,当然还有每个控制器对应的.fxml,当我点击第一个元素时,将Panes 元素设置为水果的tableView,否则为tableview蔬菜。我试过 <fx:include source=Fruits.fxml> 等等,但我不知道如何切换内容,以及如何在 ListView 中显示自定义名称作为元素名称。那么你有什么想法吗?
编辑:
我在这里How can I Populate a ListView in JavaFX using Custom Objects? 和JavaFX - ListView Item with an Image Button 找到了部分解决方案
但是问题仍然存在,我不知道如何以及在何处放置<fx:include> 标签,以便在我单击某个项目时加载它。
【问题讨论】:
-
最好不要使用
<fx:include>。只需在列表视图的选择模型中注册一个侦听器,并在选择更改时在控制器中加载新的 FXML。 -
是的,这是我的解决方案,但我有 9-10 项,并且列表正在增长,所以我认为有一种更简单的方法可以不为每次我向列表中添加新项目时。为什么说“最好不要这样做”?这是一个坏方法还是不可能?
-
不确定我是否理解。您只需要一个侦听器进行选择,然后根据选择的内容选择 FXML 文件。然后为该 FXML 文件创建一个加载器并加载它。 (我想我不明白您所说的“编写”加载程序是什么意思。)如果您使用
<fx:include>,您基本上必须加载所有可能的 FXML 文件并以某种方式隐藏您不想显示的文件,这会更复杂,并且会一直将所有这些 UI 保存在内存中。也许如果您不能以简单的方式使用监听器,请发布一些代码来展示您如何尝试这样做。 -
嗯...你是对的,将所有 UI 保存在内存中是个坏主意。在我的列表视图中添加监听器不是问题。问题是我必须在这个控制器中保留所有
.fxml路径,然后询问 lisview 的选定项:你是xController吗?...你是yController吗? 如果其中一个匹配,则加载它。但如果不是很清楚,请在几分钟内发布代码。 -
只需为处理该问题的列表视图定义一个自定义类型。
标签: java listview javafx javafx-8