我有以下代码:
@ParticleView(isDefault=true, name="login")
public class LoginView extends FXMLView {
public LoginView() {
super(LoginView.class.getResource("login.fxml"));
}
@Override
public void start() {
((LoginController) getController()).postInit();
}
@Override
public void stop() {
((LoginController) getController()).dispose();
}
}
控制器相关代码是:
public class LoginController {
@Inject
ParticleApplication app;
@Inject
private ViewManager viewManager;
@Inject
private StateManager stateManager;
@Inject
private MenuBar menuBar;
@Inject
private ToolBar toolBar;
@Inject
private StatusBar statusBar;
@FXML
private TextField txfUsuario;
@FXML
private PasswordField txfPassword;
public void initialize() {
ActionMap.register(this);
}
public void postInit() {
app.setShowCloseConfirmation(false);
toolBar.setVisible(false);
menuBar.setVisible(false);
}
}
菜单栏不可见(但空间仍然存在)但工具栏仍然可见。
任何sugestions?
答案 0 :(得分:0)
如果使用常规JavaFX应用程序运行此简短测试,您会注意到相同的行为:
@Override
public void start(Stage primaryStage) {
ToolBar toolBar = new ToolBar(new Button("Click"));
StackPane pane = new StackPane(new Label("A label"));
pane.setStyle("-fx-background-color: yellow");
BorderPane root = new BorderPane(pane);
root.setTop(toolBar);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
toolBar.setVisible(false);
}
根据JavaDoc的节点managed
属性:
定义此节点的布局是否由其父节点管理。如果节点是受管理的,则它的父节点会将节点的几何因子分解为其自己的首选大小和layoutBounds计算,并在场景布局过程中将其布局。如果受管节点的layoutBounds发生更改,它将自动触发将场景图重新布局到最近的布局根(通常是场景的根节点)。
这意味着borderpane的顶部区域保持工具栏(默认情况下是托管)给出的首选大小,无论其可见性如何。
当您将ToolBar
的可见性设置为false时,您还需要通过将managed
设置为false来释放其空间:
@Override
public void start(Stage primaryStage) {
...
toolBar.setVisible(false);
toolBar.setManaged(false);
}
修改强>
在您的情况下,您还有MenuBar
,并且ToolBar
managed
属性已绑定到其可见性,因此您只需设置:
public void postInit() {
app.setShowCloseConfirmation(false);
Platform.runLater(() -> {
toolBar.setVisible(false);
menuBar.setVisible(false);
menuBar.setManaged(false);
});
}
注意:我添加了Platform.runLater()
:在显示舞台之前调用postInit()
方法,这样就可以稍微延迟它并让控制在处理他们的能见度之前,要正确地进行渲染。
如果您想要恢复其可见性,这也应该有效:
public void setTopVisible() {
toolBar.setVisible(true);
menuBar.setVisible(true);
menuBar.setManaged(true;
}