好的,所以我几天前就开始使用JavaFX了。
首先,我尝试了很多东西来找到一种“标签”,它可以选择然后在选中时显示特定的面板,尝试使用正常的TabPanel
但是使标签更大并使它们垂直,并试图通过使用标签旋转文本,但我也有图标和井......这只是复杂,看起来不太好。
我通过使用普通AnchorPanes
和事件监听器以我自己的方式解决了这个问题。
基本上当我点击一个标签时,它会变得有点灰色,一切都可以在这里(即使它不是我真正想要的,只是一个快速修复)。
但问题出现在这里:假设我的应用程序显示主菜单,当我选择了特定的选项卡时,我希望它显示另一个窗格,我该怎么做?我点击它时尝试使用EventListener
,然后调用Stage#setScene
,但这会完全改变场景。感谢
答案 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));