如果应用程序不是全屏模式,如何更改按钮的宽度?

时间:2018-12-29 18:20:01

标签: java javafx scenebuilder

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

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

我在控制器中有一个按钮,宽度为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无效

Errors

1 个答案:

答案 0 :(得分:0)

如果您只想根据窗口是否全屏在两个数字之间更改prefWidth,则可以收听Stage中的fullScreen property 1}}属于。

Button

这首先会给您警告,因为在应用程序的这一点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) ); } } 不会成为ButtonScene的一部分。尽管这些警告令人讨厌,但是代码仍然可以正常工作。