当整个窗格在JavaFX中发生变化时,我应该有各种FXML文件吗?

时间:2017-09-19 21:02:13

标签: java javafx

在我的JavaFX应用程序的各个部分中,我列出了用户将创建的条目,但为了避免出现可怕的空体验,我希望在用户创建第一个条目之前显示完全不同的内容。

例如,当您转到网站标签时,首先会看到:

enter image description here

在您添加第一个网站后,它将被替换为类似的内容(因为我正在构建应用程序时仍然缺少网站):

enter image description here

这应该如何建模?两个独立的FXML最终是我切换的两个不同场景?

关于使用堆栈窗格,它并不真正起作用,因为控件是透明的,堆栈窗格用于应用效果:

enter image description here

2 个答案:

答案 0 :(得分:1)

使用堆栈窗格。在堆栈窗格中,为上面的每个上下文添加两个容器(例如VBox)。请记住使用ID

创建它们
<StackPane fx:id="content">
 <VBox fx:id="context_1">
  <!-- the main view -->
 </Vbox>
 <VBox fx:id="context_2">
  <!-- view when there is no content -->
 </VBox>
</StackPane>

现在在您的控制器中,有三个

@FXML private StackPane content;
@FXML private VBox context_1;
@FXML private VBox context_2;

现在有一个类似

的方法
@FXML private void userHasAddedContent(){
 context_2.toFront();
}

现在在fxml中,将onMouseClick设置为“添加新站点”按钮,或者您可以将上述方法放在按钮调用的方法中。

答案 1 :(得分:0)

你非常重要。

如果您希望显示完全不同的内容,而不是建议使用占位符值为James_D的内容,那么您必须使用不同的named_foo = named_decorator(foo) named_foo(2) #error named_foo(x=2) #works 和不同的Declare @tvTable Table ( id int IDENTITY(1,1) ,someThing varchar(100) ,otherThing varchar(100) ,thisThing varchar(100) ); Insert @tvTable Values ('stuff', 'blah', 'foo') ,('thing', 'data', 'bob'); declare @someVar nvarchar(max) ;with cte as( Select [Tag] = 1 ,[PARENT] = NULL ,[things!1!thingId] = NULL ,[thing!2!thingId!element] = NULL ,[thing!2!thingOne!element] = NULL ,[thing!2!thingTwo!cdata] = NULL ,[thing!2!thingThree!cdata] = NULL UNION ALL Select 2 ,1 ,1 ,thingId = id ,thingOne = someThing ,thingTwo = otherThing ,thingThree = thisThing From @tvTable) select @someVar = (select * from cte FOR XML EXPLICIT) select @someVar (不需要但是改变了FXML