2016-10-29 8 views
5

मैं निम्नलिखित समस्या है:विभिन्न प्रस्तावों के लिए JavaFx में स्वचालित रूप से विंडो का आकार कैसे बदलें?

मैं पूर्ण HD के साथ एक डेस्कटॉप पर एक JavaFX खिड़की बनाया है, और मैं इस तरह के दृश्य सेट: जब मैं 1360*760 के साथ एक लैपटॉप पर एप्लिकेशन को चलाने के

Scene scene = new Scene(root,1475,1015); 

संकल्प, मैं पूरा आवेदन नहीं देख सकता और मैं इसका आकार बदल नहीं सकता।

मैं डेस्कटॉप/लैपटॉप और उसके संकल्प और आयामों के फ़ंक्शन में स्वचालित रूप से आकार बदलने के लिए अपना एप्लिकेशन कैसे सेट कर सकता हूं?

उत्तर

2

मेरा मानना ​​है कि आप इस

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
int width = gd.getDisplayMode().getWidth(); 
int height = gd.getDisplayMode().getHeight(); 

लिए देख रहे हैं यह आपको अपने डिवाइस के स्क्रीन आकार का उपयोग करने की अनुमति देगा और तुम सब आकार बदलने के लिए क्या करने की जरूरत अपने कार्यक्रम के भीतर वस्तुओं की लंबाई/चौड़ाई बनाने है स्क्रीन की चौड़ाई और ऊंचाई के लिए आनुपातिक।

+0

लेकिन यह कैसे करता है, तो मैं एक और फलक जनक जड़ के अंदर है और TabPane और tableview इस आयामों पर स्थापित कर रहे हैं कि आवेदन का आकार परिवर्तन होगा? स्वचालित रूप से सभी का आकार बदल जाएगा? –

+0

आपको स्क्रीन आकार के साथ-साथ iirc के उन अनुपातों को बनाने की आवश्यकता है। –

0

उल्लेख है कि:

1) आप (JavaFX लेआउट में निर्माण BorderPane, GridPane .... आदि ...)

2) कोई automaticall.You नहीं है करने के लिए है का उपयोग करने के ऐसा करने के लिए कार्यक्रम।

3) यह उदाहरण के लिए आम है कि आप स्क्रीन (टास्कबार बिना चौड़ाई या ऊंचाई) (विंडोज, लिनक्स, मैक, सोलारिस) में यह मामला आप getVisualBounds()...

मुख्य के साथ खेलते हैं .इसके जानना चाहते है विषय


आप Responsive Design के बारे में .Below पूछ रहे हैं कि तुम क्या करना चाहते हैं make.Although सबसे अच्छा समाधान नहीं है, यह मेरा मतलब यह बेहतर प्रदर्शन के लिए संशोधित किया जा सकता के साथ का एक उदाहरण है (मैं भी कुछ कोड को शामिल किया है विंडो को स्थानांतरित करने के लिए यदि यह StageStyle.UNDECORATED विंडो खींचें यह देखने की है):

enter image description here

import javafx.application.Application; 
import javafx.scene.Cursor; 
import javafx.scene.Scene; 
import javafx.scene.input.MouseButton; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.paint.Color; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class FX extends Application { 

    int screenWidth = (int) Screen.getPrimary().getBounds().getWidth(); 
    int screenHeight = (int) Screen.getPrimary().getBounds().getHeight(); 

    Stage stage; 
    Scene scene; 

    int initialX; 
    int initialY; 

    @Override 
    public void start(Stage s) throws Exception { 

     // root 
     BorderPane root = new BorderPane(); 
     root.setStyle("-fx-background-color:rgb(186,153,122,0.7); -fx-background-radius:30;"); 

     // Responsive Design 
     int sceneWidth = 0; 
     int sceneHeight = 0; 
     if (screenWidth <= 800 && screenHeight <= 600) { 
      sceneWidth = 600; 
      sceneHeight = 350; 
     } else if (screenWidth <= 1280 && screenHeight <= 768) { 
      sceneWidth = 800; 
      sceneHeight = 450; 
     } else if (screenWidth <= 1920 && screenHeight <= 1080) { 
      sceneWidth = 1000; 
      sceneHeight = 650; 
     } 

     // Scene 
     stage = new Stage(); 
     stage.initStyle(StageStyle.TRANSPARENT); 
     scene = new Scene(root, sceneWidth, sceneHeight, Color.TRANSPARENT); 

     // Moving 
     scene.setOnMousePressed(m -> { 
      if (m.getButton() == MouseButton.PRIMARY) { 
       scene.setCursor(Cursor.MOVE); 
       initialX = (int) (stage.getX() - m.getScreenX()); 
       initialY = (int) (stage.getY() - m.getScreenY()); 
      } 
     }); 

     scene.setOnMouseDragged(m -> { 
      if (m.getButton() == MouseButton.PRIMARY) { 
       stage.setX(m.getScreenX() + initialX); 
       stage.setY(m.getScreenY() + initialY); 
      } 
     }); 

     scene.setOnMouseReleased(m -> { 
      scene.setCursor(Cursor.DEFAULT); 
     }); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * Main Method 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

लेकिन रूट के अंदर अन्य घटक कैसे आकार बदलेंगे? –

+0

@Dina Bogdan यही कारण है कि आप लेआउट का उपयोग कर रहे हैं। यह स्वचालित रूप से किया जाएगा, लेकिन आपको तर्क को परिभाषित करना होगा। मेरा मतलब यह है कि, पूर्ण एचडी 3 कंटेनर विंडो पर प्रदर्शित होते हैं। 1200 * संकल्प शायद या शायद नहीं 3 कंटेनरों displayed.So आप केवल 2 प्रदर्शित करने या उन्हें अलग layout.You के साथ प्रदर्शित किया है that.Can't बारे में एक पुस्तक एक प्रश्न का उत्तर को पढ़ने के लिए होगा हो सकता है ... ऐसा लगता है कि आप कंप्यूटर के लिए आवेदन करने कर रहे हैं जो आप फोन पर प्रदर्शित होना चाहते हैं ... – GOXR3PLUS

+0

मैं समझता हूं कि आप क्या कह रहे हैं ... मैं सोच रहा हूं कि मैं कुछ रिश्तेदार स्थिति या ऐसा कुछ उपयोग कर सकता हूं। मैं अपने आवेदन को सभी प्रकार के कंप्यूटरों पर चलाने के लिए चाहता हूं और मुझे जीयूआई के साथ समस्याएं हैं .... –

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