如何在 JavaFX 中防止調整 UI 控制元件的大小?


在 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) {
      //Creating a button
      Button button = new Button("Hello");
      //Creating a slider to resize the button
      Slider slider = new Slider(40, 200, 40);
      //Setting its orientation to Horizontal
      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);
         }
      });
      //Preventing the resize
      Button prevent = new Button("Prevent Resizing");
      //Setting action to the button
      prevent.setOnAction(e -> {
         button.setMinWidth(45);
         button.setPrefWidth(45);
         button.setMaxWidth(45);
         button.setMinHeight(25);
         button.setMaxHeight(25);
         button.setPrefHeight(25);
      });
      //Creating the pane
      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));
      //Preparing the scene
      Scene scene = new Scene(pane, 595, 250);
      stage.setTitle("Preventing Resize");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

輸出

更新於: 20-May-2020

2K+ 次瀏覽

開啟你的職業生涯

完成課程並獲得認證

開始
廣告
© . All rights reserved.