当前位置: 首页 > 知识库问答 >
问题:

当应用程序不是全屏时,如何改变按钮的宽度?

南宫云
2023-03-14

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

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

我有一个按钮在控制器的宽度-45和高度-90

  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) {

 }
}

共有1个答案

华永新
2023-03-14

如果您只想根据窗口是否全屏在两个数字之间更改PrefWidth,那么您可以监听按钮所属的StageFullScreen属性。

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

}

这首先会给出警告,因为在应用程序的这一点上,按钮将不是场景窗口的一部分。虽然这些警告很烦人,但代码仍然可以工作。

 类似资料: