2016-04-07 16 views
5

मैं ऐसा करने के लिए एक विधि खोज रहा हूं, लेकिन मुझे केवल This question without answers मिला।जावाएफएक्स स्क्रीन रेज़ोल्यूशन स्केलिंग

मैं 1366x768 लैपटॉप में विकास कर रहा हूं, मैं जीयूआई बनाने के लिए जावाएफएक्स का उपयोग करता हूं (मुझे खेद है, लेकिन मैं कोड पोस्ट नहीं कर सकता, यह मूल रूप से एक एंकरपैन है जिसमें दो ग्रिडपेन्स होते हैं, जिनमें अधिक ग्रिडपेन्स होते हैं, जिनमें लेबल होते हैं , टेक्स्टफिल्ड्स और कुछ चार्ट)।

समस्या तब होती है जब मैं किसी अन्य रिज़ॉल्यूशन (1920x1080 या 1600x900) पर प्रोजेक्ट लोड करता हूं।

मैं stage.setMaximized(true); का उपयोग कर रहा हूं, लेकिन यह केवल पृष्ठभूमि, मंच स्वयं को स्केल करता है, इसलिए सभी तत्व और कंटेनर (पैनल, लेबल, टेक्स्टफिल्ड्स .....) 1366x768 रिज़ॉल्यूशन के समान आकार बनाते हैं, जिससे जीयूआई उन प्रस्तावों पर "फिट नहीं" है जो वास्तव में 1366x768 नहीं हैं।

मुझे आशा है कि मैंने अपनी समस्या को काफी समझाया है, मेरी अंग्रेजी बिल्कुल सही नहीं है।

क्या किसी के पास मंच समाधान के साथ तत्वों को स्केल करने के बारे में कोई सुझाव है?

(मुझे प्रत्येक मॉनिटर में अधिकतम या पूर्ण स्क्रीन होने के लिए सॉफ़्टवेयर की आवश्यकता है, इसलिए एक निश्चित समाधान (1366x768, उदाहरण के लिए) एक अच्छा समाधान की तरह प्रतीत नहीं होता है)।

सभी को धन्यवाद।

अद्यतन:

मैं सिर्फ एक छोटे से उदाहरण बनाया। यह डिफ़ॉल्ट जावाएफएक्स एंकरपैन के अंदर 2x1 ग्रिडपेन है, मैंने ग्रिड फलक में दो उदाहरण बटन जोड़े।

<AnchorPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" > 
<children> 
    <GridPane prefHeight="300.0" prefWidth="400.0"> 
     <columnConstraints> 
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
     </columnConstraints> 
     <rowConstraints> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
     </rowConstraints> 
     <children> 
      <Button fx:id="example1" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.valignment="CENTER" /> 
      <Button fx:id="example2" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER" /> 
     </children> 
    </GridPane> 
</children> 

इस कोड (वास्तविक नहीं पूर्ण स्क्रीन सिर्फ stage.setMaximized(true);) (बहुत कम, मुझे पता है, यह सिर्फ एक उदाहरण है) एक 400x300 स्क्रीन में अच्छा, जब मैं यह 1366x768 को पैमाने पर लग रहा है, GridPane स्केल नहीं करता है, केवल स्टेज ही है, इसलिए मेरी स्क्रीन के ऊपरी-बाएं कोने पर 400x300 फलक (इसके छोटे बटन के साथ) के साथ मेरी एक पूर्ण स्क्रीन पृष्ठभूमि है।

टीएल; डीआर: उदाहरण कोड कोड स्क्रीन के ऊपरी-बाएं कोने में रहते हैं, और शेष संकल्प को स्केल करते समय बाकी खाली जगह होती है।

अपडेट 2; जावा कोड भूल गए।

Parent root = FXMLLoader.load(getClass().getResource("UI.fxml")); 
Scene scene = new Scene(root, java.awt.Toolkit.getDefaultToolkit().getScreenSize().width, 
      java.awt.Toolkit.getDefaultToolkit().getScreenSize().height); 
stage = new Stage(); 
stage.setMaximized(false); 
stage.setScene(scene); 
stage.setTitle("Example Menu"); 
stage.show(); 
+0

मुझे डर है कि कुछ कोड देखे बिना मदद करना असंभव है। एक लेआउट समस्या की तरह लगता है, शायद हार्ड कोडित पदों या आकार। क्या आपने लिंक किए गए प्रश्न पर टिप्पणियां पढ़ीं? एक समान समस्या प्रतीत होती है। –

+0

मैंने कड़ी मेहनत नहीं की। मैंने 'जावाएफएक्स सीन बिल्डर 2' के साथ सब कुछ किया, और आकार को देखते समय, सब कुछ (न्यूनतम, pref और max) 'USE_COMPUTED_SIZE' कहता है।मैं समझता हूं कि कोड को देखे बिना मदद करना मुश्किल है, लेकिन अगर मैं ऑनलाइन कोड डालता हूं तो मुझे निकाल दिया जा सकता है, और मुझे यह नहीं चाहिए, माफ करना। मदद करने की कोशिश करने के लिए धन्यवाद :) – Tuzane

+0

मैं देखता हूं, लेकिन शायद आप एक छोटे, आत्मनिर्भर उदाहरण को कोड कर सकते हैं जो आपके काम से संबंधित नहीं है? समस्या को अनुकरण करने के लिए एक या दो घटकों के साथ बस एक साधारण स्क्रीन? –

उत्तर

2

आपको बच्चे पर एंकर फलक बाधाएं सेट करने की आवश्यकता है। अपने मामले gridpane

AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" 

में यह हर तरफ से 0 0 0 0 पिक्सल, कंटेनर के भीतर अपने

GridPane prefHeight="300.0" prefWidth="400.0" **HERE** 

यह सर्वाधिक होगा बाल घटक के बाद जाना होगा इसलिए।

+1

आप कल्पना भी नहीं कर सकते कि मैं अभी आपसे कितना प्यार करता हूं :) यह थोड़ा उदाहरण के लिए पूरी तरह से काम करता है। – Tuzane

+0

मुझे अनुमान है कि मुझे वास्तविक प्रोजेक्ट में प्रत्येक पैनल में इस कोड को जोड़ने की आवश्यकता है ताकि सभी तत्वों को स्केल किया जा सके, है ना? उदाहरण के लिए, यदि मेरे पास ग्रिडपेन के अंदर एक बटन है, तो मैं GridPane.leftAchchor = "0,0" ... और बाकी को बटन तत्व में जोड़ दूंगा। क्या वह ठीक है? – Tuzane

+1

अच्छी तरह से एंकर फलक एंकर की तरह काम करता है, जब आप वहां बच्चों को डालते हैं, इसकी हार्डकोडेड पोषण। यदि आप उच्च रिज़ॉल्यूशन पर उदाहरण के लिए खिड़की को अधिकतम करते हैं तो आप योरू दृश्यबिडलर में तैयार होते हैं, जहां यह ठीक दिखता है, यह कुछ और नहीं जानता है कि हार्डकोडेड स्थिति , इसलिए यदि आप इसे स्केल करते हैं तो यह डरावना दिखता है, मैं केवल उस पिक्सेल पर पैरेंट में स्थिर रहूंगा। –

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