我们如何防止 JavaFX 中 UI 控件的大小调整?

javafxobject oriented programmingprogramming更新于 2025/4/14 0:22:17

在 JavaFX 中,javafx.scene.control 包为专为 UI 应用程序设计的节点提供了各种类,通过实例化这些类,您可以创建 UI 元素,如按钮、标签等。

您可以相应地使用 setPrefWidth()setPrefHeight()setprefSize() 方法调整创建的元素的大小。

要防止 UI 控件的大小调整,您需要将最小-最大和首选宽度/高度设置为与 − 相同的值

button.setMinWidth(80.0);
button.setPrefWidth(80.0);
button.setMaxWidth(80.0);

示例

以下 JavaFX 示例包含两个按钮和一个滑块。您可以通过移动滑块来调整按钮 (Hello) 的大小。单击 PreventResizing 按钮后,您无法进一步调整"Hello"按钮的大小。

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class PreventingResize extends Application {
   public void start(Stage stage) {
      //创建一个按钮
      Button button = new Button("Hello");
      //创建一个滑块来调整按钮大小
      Slider slider = new Slider(40, 200, 40);
      //将其方向设置为水平
      slider.setPrefHeight(180);
      slider.setOrientation(Orientation.VERTICAL);
      slider.setShowTickLabels(true);
      slider.setShowTickMarks(true);
      slider.setMajorTickUnit(40);
      slider.setBlockIncrement(20);
      slider.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            button.setPrefSize((double)newValue, (double)newValue);
         }
      });
      //防止调整大小
      Button Prevent = new Button("Prevent Resizing");
      //为按钮设置操作
      prevent.setOnAction(e -> {
           按钮.setMinWidth(45);
         按钮.setPrefWidth(45);
         按钮.setMaxWidth(45);
         按钮.setMinHeight(25);
         按钮.setMaxHeight(25);
         按钮.setPrefHeight(25);
      });
      //创建窗格
      BorderPane pane = new BorderPane();
      pane.setCenter(button);
      pane.setRight(prevent);
      pane.setLeft(new VBox(new Label("Button Reize"), slider));
      pane.setPadding(new Insets(10, 10, 10, 10));
      //准备场景
      Scene scene = new Scene(pane, 595, 250);
      stage.setTitle("Preventing Resize");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

输出


相关文章