JavaFX 2在运行时动态更改布局?

时间:2013-01-04 20:09:56

标签: layout javafx-2

Swing将LayoutManager与容器分开。据我所知,JavaFX不这样做。

我有一个复杂的节点结构,我希望用户能够在几种不同的布局方法之间切换。与指定流的用户等效的东西和所有容器都转换为FlowPanes的等价物。然后他们可以选择垂直,一切都垂直布局。

除了交换节点/重新创建整个结构之外,还有办法做到这一点吗?

我应该注意:层次结构在运行时会发生变化,并且会深层嵌套。

我提到了Swing,因为通过维护整个层次结构中所有容器的列表,并通过一个简单的循环(或没有列表的树遍历)在Swing上设置新的LayoutManager,可以直接在Swing中完成。 JavaFX似乎没有这种可能性,因为布局行为似乎是节点内部的。

2 个答案:

答案 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等),但您仍然不需要每次都重新创建控件。在节点层次结构的中间找到容器有点尴尬,但我确信有某种优雅的递归解决方案:)