2012-12-04 19 views
18

का केंद्र स्थान मैं जावाएफएक्स में एक एप्लीकेशन बना रहा हूं, जिसमें मैं ऐसा करना चाहता हूं यदि कोई बच्चा मंच खोला जा रहा है तो इसे मूल चरण के केंद्र में खोला जाना चाहिए। मैं mystage.centerOnScreen() का उपयोग करके ऐसा करने की कोशिश कर रहा हूं लेकिन यह बच्चे के चरण को स्क्रीन के केंद्र में असाइन करेगा, न कि पैरेंट चरण का केंद्र। मैं पैरेंट चरण को पैरेंट चरण के केंद्र में कैसे सौंप सकता हूं?चरण

private void show(Stage parentStage) { 
    mystage.initOwner(parentStage); 
    mystage.initModality(Modality.WINDOW_MODAL); 
    mystage.centerOnScreen(); 
    mystage.initStyle(StageStyle.UTILITY); 
    mystage.show(); 
} 

उत्तर

22

आप ऐसा करने के लिए पैरेंट चरण की एक्स/वाई/चौड़ाई/ऊंचाई गुणों का उपयोग कर सकते हैं। बल्कि Stage#centerOnScreen का उपयोग करने से, तुम कर सकते हो निम्नलिखित:

public class CenterStage extends Application { 
    @Override 
    public void start(final Stage stage) throws Exception { 
     stage.setX(300); 
     stage.setWidth(800); 
     stage.setHeight(400); 
     stage.show(); 

     final Stage childStage = new Stage(); 
     childStage.setWidth(200); 
     childStage.setHeight(200); 
     childStage.setX(stage.getX() + stage.getWidth()/2 - childStage.getWidth()/2); 
     childStage.setY(stage.getY() + stage.getHeight()/2 - childStage.getHeight()/2); 
     childStage.show(); 
    } 

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

यदि आप स्पष्ट रूप से बाल स्तर की चौड़ाई और ऊंचाई निर्धारित नहीं करते हैं, तो आप childStage.setOnShown ईवेंट के लिए ईवेंट हैंडलर में गणना कर सकते हैं। – axiopisty

+0

यह कैसे लगता है कि यह कितना अजीब लगता है, जब मैं इसे करता हूं तो बच्चे के चरण में निर्माण होता है ... \t \t \t \t childStage.toBack(); \t \t childStage.show(); \t \t childStage.hide(); \t \t childStage.toFront(); –

1

आप childStage के लिए एक आकार निर्धारित नहीं करते हैं, आप चौड़ाई के लिए सुनने के लिए है और ऊंचाई चौड़ाई के रूप में बदल जाता है और ऊंचाई अभी भी NaN जब onShown कहा जाता है ।

final double midX = (parentStage.getX() + parentStage.getWidth())/2; 
final double midY = (parentStage.getY() + parentStage.getHeight())/2; 

xResized = false; 
yResized = false; 

newStage.widthProperty().addListener((observable, oldValue, newValue) -> { 
    if (!xResized && newValue.intValue() > 1) { 
     newStage.setX(midX - newValue.intValue()/2); 
     xResized = true; 
    } 
}); 

newStage.heightProperty().addListener((observable, oldValue, newValue) -> { 
    if (!yResized && newValue.intValue() > 1) { 
     newStage.setY(midY - newValue.intValue()/2); 
     yResized = true; 
    } 
}); 

newStage.show(); 
संबंधित मुद्दे