Swing将LayoutManager与容器分开。据我所知,JavaFX不这样做。
我有一个复杂的节点结构,我希望用户能够在几种不同的布局方法之间切换。与指定流的用户等效的东西和所有容器都转换为FlowPanes的等价物。然后他们可以选择垂直,一切都垂直布局。
除了交换节点/重新创建整个结构之外,还有办法做到这一点吗?
我应该注意:层次结构在运行时会发生变化,并且会深层嵌套。
我提到了Swing,因为通过维护整个层次结构中所有容器的列表,并通过一个简单的循环(或没有列表的树遍历)在Swing上设置新的LayoutManager,可以直接在Swing中完成。 JavaFX似乎没有这种可能性,因为布局行为似乎是节点内部的。
答案 0 :(得分:0)
不是这样的吗?
AnchorPane main=new AnchorPane();
AnchorPane sub1=new AnchorPane();
sub1.getChildren().add(btn);
main.getChildren().add(sub1);
如果要切换布局
AnchorPane sub2=new AnchorPane();
main.getChildren().remove(sub1);
main.getChildren().add(sub2);
修改强> 我想我错过了你的布局方式。这就是我设想它的方式。
Definitions to Various Components
MainLayout
-> CustomLayout 1
-> References to various components. ( Essentially you are not creating all the components for every layout, rather you are referring to them in each layout )
-> CustomLayout 2
-> References to various components. ( More or less a different arrangement of the same components, adds some component references and removes some )
-> CustomLayout 3
-> References to various components.
做出大胆的声明,但如果JavaFX中有工具,它会如何自动执行此操作?每个模板都需要知道它应该在何处呈现特定组件,并且可以说最简单的方法是创建一个新模板,将组件排列在不同的布局中,并在用户想要查看不同的布局时交换模板。
答案 1 :(得分:0)
这在Swing中并不容易。您仍然需要再次设置各个组件的所有布局约束,除非您的布局非常简单。
我不知道swing和javaFX之间有多大区别。在JavaFX中,您需要将相同的控件添加到不同的容器(VBox,HBox等),但您仍然不需要每次都重新创建控件。在节点层次结构的中间找到容器有点尴尬,但我确信有某种优雅的递归解决方案:)