2013-03-05 8 views
41

मेरे पास जावाएफएक्स एप्लीकेशन है जिसमें केवल एक FXML फ़ाइल है। इस फ़ाइल में मेरे पास एक एंकरपैन है जिसमें इसके अंदर एक स्टैकपैन है। यहाँ स्क्रीनशॉट है:पैनल ऑटो आकार बदलने के अंदर जावाएफएक्स पैनल

my panel inside panel application

जब मैं इस आवेदन शुरू, मैं AnchorPane साथ स्वचालित रूप से StackPane आकार बदलने के लिए चाहते हैं। इस प्रकार; StackPane स्वचालित उपलब्ध चौड़ाई और ऊंचाई स्वचालित रूप से मिलेगा। फिलहाल जब मैं एप्लिकेशन का आकार बदलता हूं, एंकरपैन स्वचालित रूप से आकार बदल रहा है लेकिन स्टैकपैन अपने निश्चित आकार के रूप में रहता है।

मैं स्वचालित रूप से स्टैकपैन का आकार कैसे बदल सकता हूं और इसे अपने मूल पैनल के अंदर पूरी तरह से फैला सकता हूं?

मेरे कोड

Main.java

package app; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 

    public static void main(String[] args) { 
     Application.launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("Main.fxml")); 
     Scene scene = new Scene(root,800,600); 
     scene.getStylesheets().add(this.getClass().getResource("/app/style1.css").toExternalForm()); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 

MainController.java

package app; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.StackPane; 

public class MainController implements Initializable { 

    @FXML 
    private AnchorPane anchorPane; 
    @FXML 
    private StackPane stackPane; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
    stackPane.setPrefSize(anchorPane.getPrefWidth(), anchorPane.getPrefHeight()); //didn't work 
    }  
} 

Main.fxml

<?xml version="1.0" encoding="UTF-8"?> 
<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<AnchorPane fx:id="anchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="app.MainController"> 
    <StackPane fx:id="stackPane" ></StackPane> 
</AnchorPane> 

style1.css

#anchorPane { 
    -fx-border-width: 2px; 
    -fx-border-color: chartreuse; 
} 
#stackPane { 
    -fx-border-width: 2px; 
    -fx-border-color: red; 

    /* didn't work */ 
    -fx-hgap: 100%; 
    -fx-vgap: 100%; 
} 

उत्तर

62

खोज और परीक्षण के घंटे के बाद अंत में यह सिर्फ प्रश्न पोस्ट करने के बाद मिल गया है!

आप "AnchorPane.topAnchor, AnchorPane.bottomAnchor, AnchorPane.leftAnchor, AnchorPane.rightAnchor" का उपयोग कर सकते fxml मूल्य "0.0" के साथ आदेश// खिंचाव फिट एक AnchorPane अंदर बच्चे तत्वों संरेखित करने के लिए। इसलिए, ये आदेश बाल तत्व को आकार देने के दौरान अपने माता-पिता का पालन करने के लिए कहते हैं।

मेरे अद्यतन कोड Main.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<AnchorPane fx:id="anchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="app.MainController"> 
    <!--<StackPane fx:id="stackPane" ></StackPane>--> <!-- replace with the following --> 
    <StackPane fx:id="stackPane" AnchorPane.topAnchor="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" ></StackPane> 
</AnchorPane> 

Hier परिणाम है:

enter image description here

API दस्तावेज़ों के लिए: http://docs.oracle.com/javafx/2/api/javafx/scene/layout/AnchorPane.html

+2

क्या आप इस उत्तर को स्वीकार कर सकते हैं। हमें यह जानने की अनुमति होगी कि इस प्रश्न का समाधान है। अच्छा निष्कर्ष, इस के लिए खोज रहा था। – blo0p3r

+2

@ blo0p3r मैं करूँगा लेकिन अब सिस्टम कहता है "आप 2 दिनों में अपना जवाब स्वीकार कर सकते हैं";) उम्मीद है कि और भी अन्य सुझाव मिलेंगे। –

+0

हाय। एक बटन जोड़ा गया है। उदाहरण के लिए। \t \t \t बटन fx: आईडी = "बटन" layoutX = "172.0" layoutY = "195.0" onAction = "# ingresarLogin" prefHeight = "35.0" prefWidth = "87.0" पाठ = "Ingresar" /> \t यह सही है ?? धन्यवादएसएस –

12

मैं SceneBuilder में एक जीयूआई को डिजाइन किया गया था, की कोशिश कर रहा जो भी खिड़की का आकार है, उसे मुख्य कंटेनर अनुकूलित करें। यह हमेशा 100% चौड़ा होना चाहिए।

यह वह जगह है आप SceneBuilder में इन मूल्यों सेट कर सकते हैं जहां: डॉटेड/लाल लाइनों टॉगल करने से वास्तव में सिर्फ जोड़ने/गुण Korki उसके समाधान में पोस्ट किया है कि निकाल देंगे

AnchorPane Constraints in SceneBuilder

(AnchorPane.topAnchor आदि)।

+0

यह कौन सा एफएक्सएमएल कोड उत्पन्न करता है? मैं इसे देखना चाहता हूँ। –

+0

अच्छी तरह से आप कैसे Scenebuilder शुरू करते हैं और अपने लिए देखें ... यह सचमुच 20 सेकंड से कम में किया गया है ... – specializt

6

भी देखें here

@FXML 
private void mnuUserLevel_onClick(ActionEvent event) { 
    FXMLLoader loader = new FXMLLoader(getClass().getResource("DBedit.fxml")); 
    loader.setController(new DBeditEntityUserlevel()); 

    try { 
      Node n = (Node)loader.load(); 
      AnchorPane.setTopAnchor(n, 0.0); 
      AnchorPane.setRightAnchor(n, 0.0); 
      AnchorPane.setLeftAnchor(n, 0.0); 
      AnchorPane.setBottomAnchor(n, 0.0); 
      mainContent.getChildren().setAll(n); 
    } catch (IOException e){ 
      System.out.println(e.getMessage()); 
    } 
} 

परिदृश्य माता पिता AnchorPane में एक बच्चे fxml लोड करने के लिए है। बच्चे को अपने माता-पिता के उपयोग में प्रवेश करने के लिए AnChorPane.setxxxAnchor कमांड का उपयोग करें।

0

यह काफी आसान है क्योंकि आप FXMLBuilder का उपयोग कर रहे हैं।

बस इन आसान चरणों का पालन करें:

  1. FXMLBuilder में ओपन FXML फ़ाइल।
  2. स्टैक फलक का चयन करें।
  3. लेआउट टैब [FXMLBuilder का बायां तरफ टैब] खोलें।
  4. पक्ष मूल्य को सेट करें जिसके द्वारा आप मंच आकार के दौरान शीर्ष आकार, बाएं, दाएं, बोटम के दौरान फलक आकार की गणना करना चाहते हैं।
0

यदि आप दृश्य बिल्डर का उपयोग कर रहे हैं, तो आप दाईं ओर एक accordion पैनल देखेंगे जो सामान्यतः तीन विकल्प ("गुण", "लेआउट" और "कोड") प्राप्त होता है। दूसरे ("लेआउट") में, आपको "[पैरेंट लेआउट] बाधाओं" नामक एक विकल्प दिखाई देगा (आपके मामले में "एंकरपेन कॉन्स्ट्रेनस्ट्स")।

आपको तत्व के चार किनारों में "0" रखना चाहिए जो मूल लेआउट का प्रतिनिधित्व करता है।

0

कोई आवश्यकता नहीं है।

सिर्फ चयन फलक, सही क्लिक तो माता-पिता के लिए फिट का चयन

यह स्वचालित रूप से फलक को एंकर फलक आकार में बदल देगा।

संबंधित मुद्दे