उपयोग FXML रूप fx रूप में एक कस्टम जावा वर्ग का उपयोग करके घटकों: जड़ और के रूप में fx: अपने FXML फ़ाइल के नियंत्रक: http://docs.oracle.com/javafx/2/fxml_get_started/custom_control.htm
ऐसा करने के लिए, आप अपने कस्टम जावा वर्ग FXMLLoader के निर्माता में कॉल करने की आवश्यकता जो आपके एफएक्सएमएल लोड करेगा। लाभ FXML लोड घटकों को बदलने का तरीका है।
नेस्टेड नियंत्रकों के साथ FXMLLoader के माध्यम से घटकों को instanciate करने का क्लासिक तरीका है: FXML पहले, प्रत्येक भाग के लिए नियंत्रक।
इस तकनीक के साथ यह है: नियंत्रक पहले, फिर प्रत्येक घटक के लिए FXML। और आप सीधे FXML में FXML लोड नहीं करेंगे, आप FXML में अपनी कस्टम जावा कक्षाएं आयात करेंगे।
यह एक बेहतर अमूर्त है (यह जानने की आवश्यकता नहीं है कि जब आप उन्हें FXML में आयात करते हैं तो एक घटक लागू किया जाता है) और कोड का पुन: उपयोग करने में सहायता करता है क्योंकि यह FXML समर्थन के साथ एक कस्टम विजेट को कार्यान्वित करने जैसा है। अपने घटक को पुन: प्रयोज्य बनाने के लिए, सुनिश्चित करें कि आपके कार्यान्वयन में अन्य भागों के साथ तंग युग्मन नहीं है, या ऐसा करने के लिए आईओसी का उपयोग करें (उदाहरण के लिए, जावाएफएक्स के साथ वसंत एकीकरण के साथ)। इस तरह, आप बिना किसी चिंता के अपने आवेदन के किसी भी हिस्से (जैसे डेट इनपुट विजेट) में अपना घटक आयात करने में सक्षम होंगे और आप कोड डुप्लिकेट नहीं करेंगे।
अपने मामले में आप होगा:
public class MenuBox extends VBox {
@FXML
private LoginBox loginBox;
@FXML
private ProfilesBox profilesBox;
public MenuBox() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("menu.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
public class LoginBox extends VBox {
public LoginBox() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("login.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
public class ProfilesBox extends VBox {
public ProfilesBox() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("profiles.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
और तुम menu.fxml कि अपने पृष्ठ के लिए वैश्विक लेआउट का प्रबंधन LoginBox और ProfilesBox आयात करेगा:
<?import com.foo.bar.LoginBox ?>
<?import com.foo.bar.ProfilesBox ?>
<fx:root type="javafx.scene.layout.VBox"
xmlns:fx="http://javafx.com/fxml">
<!-- Stuff here to declare the menu bar-->
<HBox>
<ProfilesBox fx:id="profilesBox"/>
<LoginBox fx:id="loginBox"/>
</HBox>
</fx:root>
login.fxml और प्रोफाइल । एफएक्सएमएल में केवल मूल घटक होते हैं।
कुछ [नमूना कोड] (https://gist.github.com/jewelsea/6460130) में से कुछ से अवधारणाओं का उपयोग कर सवाल जवाब देता है। – jewelsea
यहां एक और उदाहरण: [लिंक] (http://stackoverflow.com/questions/19435384/how-to-bind-controls-across-two-fxml-from-the-main-controller) – Dil