java - 当应用程序不是全屏时如何更改按钮的宽度?
问题描述
我正在使用 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 它不起作用
解决方案
如果你只是想prefWidth
根据窗口是否全屏来改变两个数字之间的值,那么你可以监听属于的fullScreen
属性。Stage
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
此时应用程序的一部分。虽然这些警告很烦人,但代码应该仍然有效。
推荐阅读
- stripe-payments - 如果只接受信用卡支付,有没有src_xxxx不能做,只能用tok_xxxx做的功能?
- r - 对大列向量使用“fread()”的内存要求
- azure - Arduino MKR1000 如何向 Azure IoT Hub 发送消息
- c# - C# Sockets 字节数组
- python - 逼近平方根的牛顿法
- c# - 查找任何给定 exe 文件名的路径
- java - 如何通过 Selenium 找到具有随机 id 属性的元素
- javascript - Vue:编辑输入时更改的数据字段
- sql - SQL:计算多行结果
- powerbi - DAX、PowerBI 中的 RANKX() 问题