JavaFX动态添加面板

时间:2017-08-26 01:54:26

标签: java javafx

好的,所以我几天前就开始使用JavaFX了。 首先,我尝试了很多东西来找到一种“标签”,它可以选择然后在选中时显示特定的面板,尝试使用正常的TabPanel但是使标签更大并使它们垂直,并试图通过使用标签旋转文本,但我也有图标和井......这只是复杂,看起来不太好。

我通过使用普通AnchorPanes和事件监听器以我自己的方式解决了这个问题。 基本上当我点击一个标签时,它会变得有点灰色,一切都可以在这里(即使它不是我真正想要的,只是一个快速修复)。

但问题出现在这里:假设我的应用程序显示主菜单,当我选择了特定的选项卡时,我希望它显示另一个窗格,我该怎么做?我点击它时尝试使用EventListener,然后调用Stage#setScene,但这会完全改变场景。感谢

1 个答案:

答案 0 :(得分:0)

您不会更改场景,您将换出父类的子项(例如窗格或组)。

假设您有一位名为content的家长。 content可以是一个组或一个窗格,如GridPane或BorderPane等。现在,对于每个标签,您可以将相应的内容节点设置为content

假设您有以下对象:

AnchorPane tabDetails = ....;
AnchorPane tabAccountInfo = ....;
AnchorPane tabContactUs = ....;
Node contentDetails = ....;
Node contentAccountInfo = ....;
Node contentContactUs = ....;
Parent content = ....;

如何在屏幕上显示标签和父content对象超出了此答案的范围,您必须决定如何在屏幕上显示这些对象,例如您可以使用BorderPane或GridPane或者Panes的组合(比如HBox将标签放在BorderPane的Top位置,BorderPane可以进入场景)。由你决定。

以下是单击选项卡时替换内容的代码。

tabDetails.setOnMouseClicked(me -> content.getChildren().setAll(contentDetails));
tabAccountInfo.setOnMouseClicked(me -> content.getChildren().setAll(contentAccountInfo));
tabContactUs.setOnMouseClicked(me -> content.getChildren().setAll(contentContactUs));