0

次のコードがあります。

@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);
  }
}

メニューバーは表示されませんが (スペースはまだあります)、ツールバーは表示されています。

何か提案はありますか?

4

1 に答える 1

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);
}

ツールバー

managedノードのプロパティのJavaDocによると:

このノードのレイアウトがその親によって管理されるかどうかを定義します。ノードが管理されている場合、その親はノードのジオメトリを独自の優先サイズと layoutBounds 計算に分解し、シーンのレイアウト パス中にレイアウトします。管理対象ノードの layoutBounds が変更されると、シーングラフを最も近いレイアウト ルート (通常はシーンのルート ノード) まで再レイアウトすることが自動的にトリガーされます。

これは、境界ペインの上部領域が、その可視性に関係なく、ツールバー (デフォルトでは管理対象) によって指定された優先サイズを維持することを意味します。

a の可視性ToolBarを false に設定する場合、false に設定してそのスペースを解放する必要がありmanagedます。

@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;
}
于 2016-04-28T20:52:10.987 に答える