首页 > 解决方案 > 当应用程序不是全屏时如何更改按钮的宽度?

问题描述

我正在使用 JavaFX 和 Scene Builder 制作应用程序。

我有从主类调用的主类和控制器。

我在控制器中有一个按钮,宽度为 45,高度为 90

切换按钮被包裹在 StackPane 中,而 StackPane 被包裹在 AnchorPane 中

当应用程序不是全屏时,如何将 buttonPrefWidth 更改为 25,并在应用程序全屏时将按钮的 prefWidth 再次更改为 45 ?

或者我可以根据应用程序的大小更改按钮的 prefWidth 吗?

主类:

  public class Main extends Application {      

  public static void main(String[] args) {
  launch(args); 
 }

  @Override
  public void start(Stage primaryStage) throws Exception {

  try {

  Parent root = 
 FXMLLoader.load(getClass().getResource("/card/resources/fxml/card.fxml"));
  Scene scene = new Scene(root, 1600, 600);
  primaryStage.setScene(scene);


  scene.getStylesheets().add(getClass().getResource("style.css")
  .toExternalForm());
  primaryStage.initStyle(StageStyle.UNDECORATED);
  primaryStage.setMaximized(true);
  primaryStage.setResizable(true);

  primaryStage.getIcons().add(new Image("card/resources/logo-icon.png"));
  primaryStage.show();

    //adding resize and drag primary stage
    ResizeHelper.addResizeListener(primaryStage);

  //assign ALT+ENTER to maximize window
  final KeyCombination kb = new KeyCodeCombination(KeyCode.ENTER, KeyCombination.CONTROL_DOWN);
  scene.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
      if (kb.match(event)) {
        primaryStage.setMaximized(!primaryStage.isMaximized());
        primaryStage.setResizable(true);

      }
    }
  });

} catch (Exception e) {
  e.printStackTrace();
}

}

}

控制器:

public class Controller implements Initializable {

@FXML  private AnchorPane anchorRow;
@FXML  private StackPane hBoxCat0;
@FXML  private Button btnPalette;

@FXML
public void initialize(URL location, ResourceBundle resources) {

 }
}

编辑:

@Slaw 它不起作用

错误

标签: javajavafxscenebuilder

解决方案


如果你只是想prefWidth根据窗口是否全屏来改变两个数字之间的值,那么你可以监听属于的fullScreen属性StageButton

import javafx.beans.binding.Bindings;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class Controller {

  @FXML private Button btnPallet;

  @FXML
  private void initialize() {
    btnPallet.prefWidthProperty().bind(
        Bindings.when(Bindings.selectBoolean(btnPallet.sceneProperty(), "window", "fullScreen"))
            .then(45)
            .otherwise(25)
    );
  }

}

这首先会给你警告,因为它Button不会是应用程序的一部分SceneWindow此时应用程序的一部分。虽然这些警告很烦人,但代码应该仍然有效。


推荐阅读