JavaFX 영역 대 창

Sheeraz Gul 2024년2월15일
  1. JavaFX 영역
  2. JavaFX 창
  3. JavaFX 영역 대 창
JavaFX 영역 대 창

Region 및 Pane은 크기 조정 가능한 자식 노드의 크기를 원하는 크기로 조정하고 위치를 변경하지 않는 데 사용됩니다. 이 튜토리얼은 JavaFX에서 RegionPane의 차이점을 보여줍니다.

JavaFX 영역

JavaFX Region 클래스는 모든 JavaFX 레이아웃 창의 기본 클래스로 사용할 수 있습니다. 영역을 확장하는 데 사용되는 모든 JavaFX 레이아웃 클래스에서 공유하는 몇 가지 속성을 제공합니다.

JavaFX에는 Pane, Control, ChartAxis의 하위 클래스인 많은 클래스가 있습니다. 이 네 가지 클래스와 다른 모든 클래스는 Region 클래스의 하위 클래스입니다. 모두 Region과 동일한 속성을 갖습니다.

지역의 속성은 다음과 같습니다.

  • Background
  • Content Area
  • Padding
  • Borders
  • Margin
  • Region Insets

JavaFX 창

JavaFX PaneRegion의 하위 클래스입니다. Pane은 레이아웃을 위해 다른 많은 JavaFX 구성 요소를 포함할 수 있는 레이아웃 컨테이너입니다.

레이아웃 알고리즘을 제공하지 않지만 구성 요소에 대해 선호되는 위치에 포함된 구성 요소를 표시합니다. Pane은 하위 구성 요소에 의해 지정된 layoutXlayoutY를 사용하여 표시할 위치를 결정합니다.

Pane은 하위 클래스이므로 JavaFX Region 클래스의 모든 속성을 상속합니다. 따라서 Background, Content Area, Padding, Borders 등도 Pane에 사용할 수 있습니다.

JavaFX 영역 대 창

RegionPane은 크기 조정이 가능한 자식 노드의 크기를 원하는 크기로 조정하는 데 사용됩니다. 그들은 결코 그것들을 재배치하지 않을 것입니다.

  • Region은 자식 노드가 있는 슈퍼클래스입니다. Pane은 하위 노드가 있는 Region 클래스의 하위 클래스입니다.
  • Region은 공개 API를 통한 하위 노드 조작을 허용하지 않습니다. 반면에 Pane은 공개 API가 자식 노드를 조작할 수 있도록 합니다.
  • Region.getChildren()은 보호되지만 Pane.getChildren은 보호된 메서드가 아닙니다.
  • Region은 구성 요소 개발자 전용입니다. 이것이 API 사용자가 Pane, Hbox 등과 같은 자식을 조작하는 것을 허용하거나 허용하지 않는 선택을 제공하는 이유입니다. 반면에 Pane은 그런 권한을 제공하지 않습니다. API 사용자는 자식 노드를 직접 조작할 수 있습니다.

RegionPane에 대한 예제를 시도해 보겠습니다.

지역의 예:

package delftstack;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavaFX_Reigon extends Application {
  public void start(Stage Label_Stage) {
    String Label_Text = "DelftStack is a resource for everyone interested in programming.";
    // Create a Label
    Label Demo_Label = new Label(Label_Text);
    // wrap the label
    Demo_Label.setWrapText(true);
    // Set the maximum width of the label
    Demo_Label.setMaxWidth(300);
    // Set the position of the label
    Demo_Label.setTranslateX(30);
    Demo_Label.setTranslateY(30);
    // Create a Region
    Region Label_Root = new Region();
    // Add Children to region which will throw an error
    Label_Root.getChildren().add(Demo_Label);
    // Set the stage
    Scene Label_Scene = new Scene(Label_Root, 595, 150, Color.BEIGE);
    Label_Stage.setTitle("Region Example");
    Label_Stage.setScene(Label_Scene);
    Label_Stage.show();
  }
  public static void main(String args[]) {
    launch(args);
  }
}

위의 코드는 레이블에서 텍스트를 래핑하는 데 사용됩니다. 보시다시피 Region에 자식 노드를 추가했는데 이는 불가능하므로 이 코드에서는 오류가 발생해야 합니다.

출력 참조:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at javafx.graphics@18.0.1/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:465)
    at javafx.graphics@18.0.1/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)

창에 자식 노드를 추가할 수 있는 Pane에 대해 동일한 예를 시도해 보겠습니다. 예를 참조하십시오.

package delftstack;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavaFX_Reigon extends Application {
  public void start(Stage Label_Stage) {
    String Label_Text = "DelftStack is a resource for everyone interested in programming.";
    // Create a Label
    Label Demo_Label = new Label(Label_Text);
    // wrap the label
    Demo_Label.setWrapText(true);
    // Set the maximum width of the label
    Demo_Label.setMaxWidth(300);
    // Set the position of the label
    Demo_Label.setTranslateX(30);
    Demo_Label.setTranslateY(30);
    // Create a Pane
    Pane Label_Root = new Pane();
    // Add Children to Pane which will work properly
    Label_Root.getChildren().add(Demo_Label);
    // Set the stage
    Scene Label_Scene = new Scene(Label_Root, 595, 150, Color.BEIGE);
    Label_Stage.setTitle("Pane Example");
    Label_Stage.setScene(Label_Scene);
    Label_Stage.show();
  }
  public static void main(String args[]) {
    launch(args);
  }
}

이 코드는 창에 자식 노드를 추가할 수 있기 때문에 잘 작동합니다. 출력 참조:

JavaFX 창

작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

관련 문장 - Java JavaFX