javafx
लेआउट
खोज…
StackPane
StackPane
अपने बच्चों को बैक-टू-फ्रंट स्टैक में देता है।
बच्चों के z- क्रम को बच्चों की सूची के क्रम द्वारा परिभाषित किया गया है ( getChildren
को कॉल करके सुलभ): 0 वां बच्चा नीचे का और आखिरी बच्चा स्टैक के शीर्ष पर है।
स्टैकपैन अपने स्वयं के सामग्री क्षेत्र को भरने के लिए प्रत्येक बच्चे का आकार बदलने का प्रयास करता है। मामले में एक बच्चे के क्षेत्र को भरने के लिए आकार नहीं बदला जा सकता है, अगर StackPane
(क्योंकि या तो यह आकार बदलने योग्य नहीं था या उसके अधिकतम आकार यह रोका गया) तो इसे का उपयोग क्षेत्र के भीतर गठबंधन किया जाएगा alignmentProperty
stackpane, जो डिफ़ॉल्ट रूप में की Pos.CENTER.
उदाहरण
// Create a StackPane
StackPane pane = new StackPane();
// Create three squares
Rectangle rectBottom = new Rectangle(250, 250);
rectBottom.setFill(Color.AQUA);
Rectangle rectMiddle = new Rectangle(200, 200);
rectMiddle.setFill(Color.CADETBLUE);
Rectangle rectUpper = new Rectangle(150, 150);
rectUpper.setFill(Color.CORAL);
// Place them on top of each other
pane.getChildren().addAll(rectBottom, rectMiddle, rectUpper);
HBox और VBox
HBox
और VBox
लेआउट बहुत समान हैं, दोनों एक ही पंक्ति में अपने बच्चों को बाहर करते हैं।
सामान्य लक्षण
यदि एक HBox
या VBox
में एक बॉर्डर और / या पैडिंग सेट है, तो उन इनसेट्स के भीतर सामग्री VBox
जाएगी।
वे बच्चे के दृश्य संपत्ति मूल्य की परवाह किए बिना प्रत्येक प्रबंधित बच्चे को बाहर करते हैं; मानव रहित बच्चों की अनदेखी की जाती है।
सामग्री के संरेखण को संरेखण संपत्ति द्वारा नियंत्रित किया जाता है, जो Pos.TOP_LEFT
लिए चूक Pos.TOP_LEFT
।
HBox
HBox
अपने बच्चों को बाईं से दाईं ओर एक क्षैतिज पंक्ति में HBox
है।
HBox
बच्चों (यदि आकार बदलने योग्य) को उनकी पसंदीदा चौड़ाई के आकार में बदल देगा और अपनी फ़िलहाइट प्रॉपर्टी का उपयोग करके यह निर्धारित करेगा कि अपनी ऊँचाई को भरने के लिए आकार बदलने के लिए या अपनी ऊँचाई को अपनी पसंद के अनुसार रखने के लिए (fillHeight defaults to true)।
एक HBox बनाना
// HBox example
HBox row = new HBox();
Label first = new Label("First");
Label second = new Label("Second");
row.getChildren().addAll(first, second);
VBox
VBox
अपने बच्चों को ऊपर से नीचे तक एक ही ऊर्ध्वाधर कॉलम में देता है।
VBox
बच्चों (यदि आकार बदलने योग्य) को उनकी पसंदीदा ऊंचाइयों का आकार देगा और अपनी फ़िल्डविद संपत्ति का उपयोग करके यह निर्धारित करेगा कि अपनी चौड़ाई भरने के लिए उनकी चौड़ाई का आकार बदलना है या उनकी चौड़ाई को उनकी पसंद के अनुसार रखना है (fillWidth defaults to true)।
एक VBox बनाना
// VBox example
VBox column = new VBox();
Label upper = new Label("Upper");
Label lower = new Label("Lower");
column.getChildren().addAll(upper, lower);
BorderPane
BorderPane
को पांच अलग-अलग क्षेत्रों में विभाजित किया गया है।
सीमा क्षेत्रों ( Top
, Right
, Bottom
, Left
) ने अपनी सामग्री के आधार पर आकार को प्राथमिकता दी है। डिफ़ॉल्ट रूप से वे केवल वही लेंगे जो उन्हें चाहिए, जबकि Center
क्षेत्र कोई भी शेष स्थान लेगा। जब सीमा क्षेत्र खाली होते हैं, तो वे कोई स्थान नहीं लेते हैं।
प्रत्येक क्षेत्र में केवल एक तत्व हो सकता है। इसे setTop(Node)
, setRight(Node)
, setBottom(Node)
, setLeft(Node)
, setCenter(Node)
का उपयोग करके जोड़ा जा सकता है। आप एक ही क्षेत्र में एक से अधिक तत्वों को रखने के लिए अन्य लेआउट का उपयोग कर सकते हैं।
//BorderPane example
BorderPane pane = new BorderPane();
Label top = new Label("Top");
Label right = new Label("Right");
HBox bottom = new HBox();
bottom.getChildren().addAll(new Label("First"), new Label("Second"));
VBox left = new VBox();
left.getChildren().addAll(new Label("Upper"), new Label("Lower"));
StackPane center = new StackPane();
center.getChildren().addAll(new Label("Lorem"), new Label("ipsum"));
pane.setTop(top); //The text "Top"
pane.setRight(right); //The text "Right"
pane.setBottom(bottom); //Row of two texts
pane.setLeft(left); //Column of two texts
pane.setCenter(center); //Two texts on each other
FlowPane
FlowPane
उपलब्ध क्षैतिज या ऊर्ध्वाधर स्थान के आधार पर पंक्तियों या स्तंभों में नोड्स देता है। यह अगली पंक्ति में नोड्स को लपेटता है जब क्षैतिज स्थान सभी नोड्स की चौड़ाई के कुल से कम है; यह अगले कॉलम में नोड्स को लपेटता है जब ऊर्ध्वाधर स्थान सभी नोड्स की ऊंचाई से कम होता है। यह उदाहरण डिफ़ॉल्ट क्षैतिज लेआउट दिखाता है:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
FlowPane root = new FlowPane();
for (int i=1; i<=15; i++) {
Button b1=new Button("Button "+String.valueOf(i));
root.getChildren().add(b1); //for adding button to root
}
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("FlowPane Layout");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
डिफ़ॉल्ट
FlowPane
निर्माता:
FlowPane root = new FlowPane();
अतिरिक्त
FlowPane
निर्माणकर्ता:
FlowPane() //Creates a horizontal FlowPane layout with hgap/vgap = 0 by default.
FlowPane(double hgap, double gap) //Creates a horizontal FlowPane layout with the specified hgap/vgap.
FlowPane(double hgap, double vgap, Node... children) //Creates a horizontal FlowPane layout with the specified hgap/vgap.
FlowPane(Node... children) //Creates a horizontal FlowPane layout with hgap/vgap = 0.
FlowPane(Orientation orientation) //Creates a FlowPane layout with the specified orientation and hgap/vgap = 0.
FlowPane(Orientation orientation, double hgap, double gap) //Creates a FlowPane layout with the specified orientation and hgap/vgap.
FlowPane(Orientation orientation, double hgap, double vgap, Node... children) //Creates a FlowPane layout with the specified orientation and hgap/vgap.
FlowPane(Orientation orientation, Node... children) //Creates a FlowPane layout with the specified orientation and hgap/vgap = 0.
लेआउट में नोड्स
add()
से पैरेंटPane
केadd()
याaddAll()
तरीकों का उपयोग किया जाता है:
Button btn = new Button("Demo Button");
root.getChildren().add(btn);
root.getChildren().addAll(…);
डिफ़ॉल्ट रूप से, एक FlowPane
बाएं से दाएं बच्चे के नोड्स को बाहर करता है। प्रवाह संरेखण को बदलने के लिए, प्रकार Pos
एक गणना मूल्य में पास करके setAlignment()
विधि को कॉल करें।
कुछ आमतौर पर इस्तेमाल किया प्रवाह संरेखण:
root.setAlignment(Pos.TOP_RIGHT); //for top right
root.setAlignment(Pos.TOP_CENTER); //for top Center
root.setAlignment(Pos.CENTER); //for Center
root.setAlignment(Pos.BOTTOM_RIGHT); //for bottom right
GridPane
GridPane
अपने बच्चों को पंक्तियों और स्तंभों के एक लचीले ग्रिड के भीतर देता है।
ग्रिडिडेन के बच्चे
एक बच्चे को GridPane
भीतर कहीं भी रखा जा सकता है और कई पंक्तियों / स्तंभों (डिफ़ॉल्ट अवधि 1 है) और ग्रिड के भीतर इसके स्थान को लेआउट की कमी से परिभाषित किया गया है:
बाधा | विवरण |
---|---|
columnIndex | स्तंभ जहां बच्चे का लेआउट क्षेत्र शुरू होता है। |
rowIndex | पंक्ति जहां बच्चे का लेआउट क्षेत्र शुरू होता है। |
columnSpan | कॉलम की संख्या बच्चे के लेआउट क्षेत्र में क्षैतिज रूप से फैली हुई है। |
rowspan | बच्चे के लेआउट क्षेत्र में पंक्तियों की संख्या लंबवत होती है। |
पंक्तियों / स्तंभों की कुल संख्या को फ्रंट अप निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि सामग्री को समायोजित करने के लिए ग्रिडपेन स्वचालित रूप से ग्रिड का विस्तार / अनुबंध करेगा।
बच्चों को ग्रिडपेन से जोड़ना
नए Node
को GridPane
में जोड़ने के लिए बच्चों पर लेआउट की बाधाओं को GridPane
क्लास की स्थिर पद्धति का उपयोग करके सेट किया जाना चाहिए, फिर उन बच्चों को GridPane
उदाहरण में जोड़ा जा सकता है।
GridPane gridPane = new GridPane();
// Set the constraints: first row and first column
Label label = new Label("Example");
GridPane.setRowIndex(label, 0);
GridPane.setColumnIndex(label, 0);
// Add the child to the grid
gridpane.getChildren().add(label);
GridPane
इन चरणों को संयोजित करने के लिए सुविधाजनक तरीके प्रदान करता है:
gridPane.add(new Button("Press me!"), 1, 0); // column=1 row=0
GridPane
वर्ग भी row- और बच्चे तत्वों की columnspan स्थापित करने के लिए स्थिर सेटर तरीकों प्रदान करता है:
Label labelLong = new Label("Its a long text that should span several rows");
GridPane.setColumnSpan(labelLong, 2);
gridPane.add(labelLong, 0, 1); // column=0 row=1
कॉलम और पंक्तियों का आकार
डिफ़ॉल्ट रूप से, उनकी सामग्री को फिट करने के लिए पंक्तियों और स्तंभों को आकार दिया जाएगा। पंक्ति और स्तंभ आकार के स्पष्ट नियंत्रण की जरूरत के मामले में, RowConstraints
और ColumnConstraints
उदाहरणों में जोड़ा जा सकता GridPane
। इन दो बाधाओं को जोड़ने से ऊपर का उदाहरण पहले कॉलम 100 पिक्सेल, दूसरा कॉलम 200 पिक्सेल लंबा होगा।
gridPane.getColumnConstraints().add(new ColumnConstraints(100));
gridPane.getColumnConstraints().add(new ColumnConstraints(200));
डिफ़ॉल्ट रूप से GridPane
पंक्तियों / स्तंभों को अपने पसंदीदा आकार में बदल देगा, भले ही ग्रिडपैन अपने पसंदीदा आकार से बड़ा हो। डायनामिक कॉलम / रो साइज़ का समर्थन करने के लिए, दोनों कॉनस्टेंट क्लास तीन संपत्ति प्रदान करते हैं: न्यूनतम आकार, अधिकतम आकार और पसंदीदा आकार।
इसके अतिरिक्त ColumnConstraints
प्रदान करता है setHGrow
और RowConstraints
प्रदान करता है setVGrow
बढ़ रही है और सिकुड़ते की प्राथमिकता को प्रभावित करने के तरीके। तीन पूर्व-निर्धारित प्राथमिकताएं हैं:
- प्रायोरिटी.वेअल्स : हमेशा अन्य लेआउट क्षेत्रों के साथ अंतरिक्ष में वृद्धि (या कमी) को साझा करने (या सिकोड़ने) की कोशिश करें, जिसमें ALWAYS का विकास (या सिकुड़न) हो।
- प्राथमिकताएँ। कुछ प्रश्न : यदि कोई अन्य लेआउट क्षेत्र नहीं हैं, जो बढ़ने (या सिकुड़ने) के साथ ALWAYS या उन लेआउट क्षेत्रों में बढ़े हुए (या घटे हुए) स्थान को अवशोषित नहीं करते हैं, तो अंतरिक्ष में वृद्धि (या कमी) को साझा करेंगे। अन्य लेआउट क्षेत्र SOMETIMES की।
- Priority.NEVER: लेआउट क्षेत्र बढ़ेगा कभी नहीं (या हटना) जब वहाँ अंतरिक्ष में वृद्धि (या कमी) क्षेत्र में उपलब्ध है।
ColumnConstraints column1 = new ColumnConstraints(100, 100, 300);
column1.setHgrow(Priority.ALWAYS);
ऊपर परिभाषित स्तंभ का आकार न्यूनतम 100 पिक्सेल है और यह हमेशा तब तक बढ़ने की कोशिश करेगा जब तक कि इसकी अधिकतम 300 पिक्सेल चौड़ाई नहीं हो जाती।
पंक्तियों और स्तंभों के लिए प्रतिशत आकार को परिभाषित करना भी संभव है। निम्न उदाहरण एक GridPane
को परिभाषित करता है जहां पहला कॉलम ग्रिडपैन की चौड़ाई का 40% भरता है, दूसरा कॉलम 60% भरता है।
GridPane gridpane = new GridPane();
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(40);
ColumnConstraints column2 = new ColumnConstraints();
column2.setPercentWidth(60);
gridpane.getColumnConstraints().addAll(column1, column2);
ग्रिड कोशिकाओं के अंदर तत्वों का संरेखण
के संरेखण Node
रों का उपयोग करके परिभाषित किया जा सकता setHalignment
की (क्षैतिज) विधि ColumnConstraints
वर्ग और setValignment
(ऊर्ध्वाधर) की विधि RowConstraints
वर्ग।
ColumnConstraints column1 = new ColumnConstraints();
column1.setHalignment(HPos.RIGHT);
RowConstraints row1 = new RowConstraints();
row1.setValignment(VPos.CENTER);
TilePane
टाइल फलक लेआउट FlowPane लेआउट के समान है। टाइलपैन सभी नोड्स को एक ग्रिड में रखता है जिसमें प्रत्येक सेल, या टाइल, एक ही आकार होता है। यह क्षैतिज या लंबवत रूप से स्वच्छ पंक्तियों और स्तंभों में नोड्स की व्यवस्था करता है।
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("TilePane Demo");
double width = 400;
double height = 300;
TilePane root = new TilePane();
root.setStyle("-fx-background-color:blue");
// to set horizontal and vertical gap
root.setHgap(20);
root.setVgap(50);
Button bl = new Button("Buttons");
root.getChildren().add(bl);
Button btn = new Button("Button");
root.getChildren().add(btn);
Button btn1 = new Button("Button 1");
root.getChildren().add(btn1);
Button btn2 = new Button("Button 2");
root.getChildren().add(btn2);
Button btn3 = new Button("Button 3");
root.getChildren().add(btn3);
Button btn4 = new Button("Button 4");
root.getChildren().add(btn4);
Scene scene = new Scene(root, width, height);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
उत्पादन
टाइलपेन बनाने के लिए
TilePane root = new TilePane();
setHgap () और setVgap () पद्धति का उपयोग स्तंभ और स्तंभ के बीच अंतर बनाने के लिए किया जाता है। हम उपयोग करके लेआउट के लिए कॉलम भी सेट कर सकते हैं
int columnCount = 2;
root.setPrefColumns(columnCount);
AnchorPane
AnchorPane
एक ऐसा लेआउट है जो सामग्री को एक विशिष्ट दूरी पर पक्षों से रखने की अनुमति देता है।
AnchorPane
में AnchorPane
पाने के लिए 4 तरीके और 4 तरीके हैं। इन विधियों का पहला पैरामीटर बच्चा Node
। बसने वालों का दूसरा पैरामीटर उपयोग करने के लिए Double
मान है। यह मान हो सकता है null
दिया पक्ष के लिए कोई बाधा का संकेत है।
सेटर विधि | पानेवाला तरीका |
---|---|
setBottomAnchor | getBottomAnchor |
setLeftAnchor | getLeftAnchor |
setRightAnchor | getRightAnchor |
setTopAnchor | getTopAnchor |
निम्नलिखित उदाहरण में पक्षों से निर्दिष्ट दूरी पर नोड्स हैं।
center
क्षेत्र को पक्षों से निर्दिष्ट दूरी रखने के लिए भी आकार दिया जाता है। विंडो के आकार बदलने पर व्यवहार का निरीक्षण करें।
public static void setBackgroundColor(Region region, Color color) {
// change to 50% opacity
color = color.deriveColor(0, 1, 1, 0.5);
region.setBackground(new Background(new BackgroundFill(color, CornerRadii.EMPTY, Insets.EMPTY)));
}
@Override
public void start(Stage primaryStage) {
Region right = new Region();
Region top = new Region();
Region left = new Region();
Region bottom = new Region();
Region center = new Region();
right.setPrefSize(50, 150);
top.setPrefSize(150, 50);
left.setPrefSize(50, 150);
bottom.setPrefSize(150, 50);
// fill with different half-transparent colors
setBackgroundColor(right, Color.RED);
setBackgroundColor(left, Color.LIME);
setBackgroundColor(top, Color.BLUE);
setBackgroundColor(bottom, Color.YELLOW);
setBackgroundColor(center, Color.BLACK);
// set distances to sides
AnchorPane.setBottomAnchor(bottom, 50d);
AnchorPane.setTopAnchor(top, 50d);
AnchorPane.setLeftAnchor(left, 50d);
AnchorPane.setRightAnchor(right, 50d);
AnchorPane.setBottomAnchor(center, 50d);
AnchorPane.setTopAnchor(center, 50d);
AnchorPane.setLeftAnchor(center, 50d);
AnchorPane.setRightAnchor(center, 50d);
// create AnchorPane with specified children
AnchorPane anchorPane = new AnchorPane(left, top, right, bottom, center);
Scene scene = new Scene(anchorPane, 200, 200);
primaryStage.setScene(scene);
primaryStage.show();
}