आप इस के लिए एक VBox
उपयोग करना चाहते हैं, विधि आप के लिए देख रहे हैं:
VBox.setVgrow(node, Priority.ALWAYS);
डिफ़ॉल्ट रूप से एक VBox सिर्फ बच्चों के एक अन्य के तहत शीर्ष बाएं से स्थापित करेंगे आप इसे कहां रखते हैं। बच्चे सभी उपलब्ध ऊर्ध्वाधर क्षेत्र को भरने के लिए विस्तार नहीं करते हैं, जब तक कि आप बिना किसी अधिकतम ऊंचाई वाले बच्चे पर एक Vgrow बाधा सेट करते हैं।
कुछ अलग अलग तरीकों से आप लेआउट आप की तलाश प्राप्त कर सकते हैं (वहाँ दूसरों के रूप में अच्छी तरह से कर रहे हैं):
- एक
StackPane
का प्रयोग करें एक VBox
के बजाय और साथ StackPane.setAlignment(closeButton, Pos.BOTTOM_CENTER);
- उपयोग एक
AnchorPane
बजाय अपने बटन संरेखित VBox
और AnchorPane
पर उचित बाधाएं सेट करें।
- spring region का उपयोग करें जो एक खाली क्षेत्र है जो रिक्त स्थान भरने के लिए फैला हुआ है।
नमूना वसंत क्षेत्र:
Region topSpring = new Region();
Region bottomSpring = new Region();
Scene aboutDialogScene = new Scene(VBoxBuilder.create()
.children(topSpring, new Text(text), bottomSpring, closeButton)
.alignment(Pos.CENTER)
.padding(new Insets(10))
.build(), xSize, ySize, backgroundColor);
VBox.setVgrow(topSpring, Priority.ALWAYS);
VBox.setVgrow(bottomSpring, Priority.ALWAYS);
कॉलिंग closeButton.setAlignment(Pos.BOTTOM_CENTER);
closeButton, नहीं closeButton के संरेखण के भीतर उसे अपने जनक है भीतर चीजों के संरेखण (पाठ और ग्राफिक) (सेट जो क्या आप वास्तव में चाहते हैं)।
कैसे समझ लेआउट की कमी से काम के लिए, SceneBuilder के साथ चारों ओर खेलने के लिए और ScenicView मौजूदा कोड में डिबग लेआउट मुद्दों मदद कर सकते हैं एक अच्छा उपकरण है।
यहाँ अपने लेआउट के कुछ ही FXML नमूने है कि आप कैसे अलग लेआउट विकल्प काम को देखने के लिए SceneBuilder में लोड कर सकते हैं।
नीचे नमूनों की
सभी आसानी से सादे जावा अगर आप पसंद करते JavaFX एपीआई का उपयोग कर में लिखा जा सकता है। मैं उन्हें fxml में लिखा है के रूप में यह लेआउट SceneBuilder में पूर्वावलोकन करने के लिए आसान बनाता है।
FXML नमूना एक StackPane का उपयोग कर:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<StackPane id="StackPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="280.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Label text="SQL Browser Version 1.0" />
<Button mnemonicParsing="false" text="Button" StackPane.alignment="BOTTOM_CENTER" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</StackPane>
और एक ही बात कुछ वसंत क्षेत्रों के साथ:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<VBox alignment="CENTER" prefHeight="280.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Region prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS" />
<Label text="SQL Browser Version 1.0" />
<Region prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS" />
<Button mnemonicParsing="false" text="Close" />
</children>
</VBox>
और लेबल खुद का विस्तार करने के लिए सेट के साथ एक ही बात VBox में खाली स्थान भरें:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<VBox alignment="CENTER" prefHeight="280.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Label maxHeight="1.7976931348623157E308" text="SQL Browser Version 1.0" VBox.vgrow="ALWAYS" />
<Button mnemonicParsing="false" text="Close" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>