Как изменить ширину кнопки, когда приложение не полноэкранное? - PullRequest
0 голосов
/ 29 декабря 2018

Я делаю приложение с помощью 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 это не работает

Errors

1 Ответ

0 голосов
/ 30 декабря 2018

Если вы просто хотите изменить prefWidth между двумя числами в зависимости от того, является ли окно полноэкранным, то вы можете прослушать свойство fullScreen Stage the 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)
    );
  }

}

Сначала вы получите предупреждения, поскольку Button не будет частью Scene или Window на данном этапе приложения.Пока эти предупреждения раздражают, код все равно должен работать.

...