JavaFX 영역 대 창
Region 및 Pane은 크기 조정 가능한 자식 노드의 크기를 원하는 크기로 조정하고 위치를 변경하지 않는 데 사용됩니다. 이 튜토리얼은 JavaFX에서 Region
과 Pane
의 차이점을 보여줍니다.
JavaFX 영역
JavaFX Region
클래스는 모든 JavaFX 레이아웃 창의 기본 클래스로 사용할 수 있습니다. 영역을 확장하는 데 사용되는 모든 JavaFX 레이아웃 클래스에서 공유하는 몇 가지 속성을 제공합니다.
JavaFX에는 Pane
, Control
, Chart
및 Axis
의 하위 클래스인 많은 클래스가 있습니다. 이 네 가지 클래스와 다른 모든 클래스는 Region
클래스의 하위 클래스입니다. 모두 Region
과 동일한 속성을 갖습니다.
지역의 속성은 다음과 같습니다.
Background
Content Area
Padding
Borders
Margin
Region Insets
JavaFX 창
JavaFX Pane
은 Region
의 하위 클래스입니다. Pane
은 레이아웃을 위해 다른 많은 JavaFX 구성 요소를 포함할 수 있는 레이아웃 컨테이너입니다.
레이아웃 알고리즘을 제공하지 않지만 구성 요소에 대해 선호되는 위치에 포함된 구성 요소를 표시합니다. Pane
은 하위 구성 요소에 의해 지정된 layoutX
및 layoutY
를 사용하여 표시할 위치를 결정합니다.
Pane
은 하위 클래스이므로 JavaFX Region
클래스의 모든 속성을 상속합니다. 따라서 Background, Content Area, Padding, Borders 등도 Pane
에 사용할 수 있습니다.
JavaFX 영역 대 창
Region
과 Pane
은 크기 조정이 가능한 자식 노드의 크기를 원하는 크기로 조정하는 데 사용됩니다. 그들은 결코 그것들을 재배치하지 않을 것입니다.
Region
은 자식 노드가 있는 슈퍼클래스입니다.Pane
은 하위 노드가 있는Region
클래스의 하위 클래스입니다.Region
은 공개 API를 통한 하위 노드 조작을 허용하지 않습니다. 반면에Pane
은 공개 API가 자식 노드를 조작할 수 있도록 합니다.Region.getChildren()
은 보호되지만Pane.getChildren
은 보호된 메서드가 아닙니다.Region
은 구성 요소 개발자 전용입니다. 이것이 API 사용자가Pane
,Hbox
등과 같은 자식을 조작하는 것을 허용하거나 허용하지 않는 선택을 제공하는 이유입니다. 반면에Pane
은 그런 권한을 제공하지 않습니다. API 사용자는 자식 노드를 직접 조작할 수 있습니다.
Region
과 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.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);
}
}
이 코드는 창에 자식 노드를 추가할 수 있기 때문에 잘 작동합니다. 출력 참조:
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