मैं एक बहुत बड़ा आवेदन जो कई संवाद है है स्क्रीन यह पता लगाने की। मेरे काम को यकीन है कि एक संवाद है, जो पूरी तरह से दिखाई नहीं देता है (उपयोगकर्ता यह दृश्य स्क्रीन क्षेत्र से बाहर खींच लिया क्योंकि) स्क्रीन के केंद्र में वापस ले जाया जाता है बनाने के लिए है।कैसे जिस पर एक JDialog दिखाया गया है
कोई समस्या नहीं है कि जब मैं केवल एक स्क्रीन के साथ काम कर रहा हूँ। यह ठीक काम करता है ... हालांकि, इस एप्लिकेशन के अधिकांश उपयोगकर्ताओं के पास उनके डेस्कटॉप पर दो स्क्रीन हैं ...
जब मैं यह पता लगाने की कोशिश करता हूं कि संवाद किस स्क्रीन पर दिखाया गया है और उस विशिष्ट स्क्रीन पर केंद्रित है। .. ठीक है, यह वास्तव में केंद्र करता है, लेकिन प्राथमिक स्क्रीन पर (जो स्क्रीन पर संवाद नहीं दिखाया जा सकता है)।
आप को दिखाने के लिए क्या मेरे विचार थे अब तक, यहाँ कोड ...
/**
* Get the number of the screen the dialog is shown on ...
*/
private static int getActiveScreen(JDialog jd) {
int screenId = 1;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gd = ge.getScreenDevices();
for (int i = 0; i < gd.length; i++) {
GraphicsConfiguration gc = gd[i].getDefaultConfiguration();
Rectangle r = gc.getBounds();
if (r.contains(jd.getLocation())) {
screenId = i + 1;
}
}
return screenId;
}
/**
* Get the Dimension of the screen with the given id ...
*/
private static Dimension getScreenDimension(int screenId) {
Dimension d = new Dimension(0, 0);
if (screenId > 0) {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
DisplayMode mode = ge.getScreenDevices()[screenId - 1].getDisplayMode();
d.setSize(mode.getWidth(), mode.getHeight());
}
return d;
}
/**
* Check, if Dialog can be displayed completely ...
* @return true, if dialog can be displayed completely
*/
private boolean pruefeDialogImSichtbarenBereich() {
int screenId = getActiveScreen(this);
Dimension dimOfScreen = getScreenDimension(screenId);
int xPos = this.getX();
int yPos = this.getY();
Dimension dimOfDialog = this.getSize();
if (xPos + dimOfDialog.getWidth() > dimOfScreen.getWidth() || yPos + dimOfDialog.getHeight() > dimOfScreen.getHeight()) {
return false;
}
return true;
}
/**
* Center Dialog...
*/
private void zentriereDialogAufMonitor() {
this.setLocationRelativeTo(null);
}
मैं डिबगिंग जबकि तरह का तथ्य यह है कि जिस तरह से getActiveScreen()
मैं काम करने के लिए हालांकि नहीं लगता भर में आया है; ऐसा लगता है कि हमेशा 2 वापस आते हैं (जो कि बकवास है, क्योंकि इसका मतलब यह होगा कि संवाद हमेशा दूसरी मॉनिटर में दिखाया जाता है ... जो निश्चित रूप से सत्य नहीं है)।
किसी को भी कैसे स्क्रीन यह वास्तव में पर दिखाया जाता है पर मेरे संवाद केंद्र के लिए किसी भी विचार है?
एकाधिक डिस्प्ले पर कितनी स्क्रीन ऐप दिखाई देगी? –
मैं काफी यकीन है कि अगर मैं आपके प्रश्न को नहीं कर रहा हूँ, लेकिन अगर मैं इसे सही ढंग से समझ में आया, ... मैं नहीं जानता। यह भी, कोई फर्क नहीं पड़ता क्योंकि संवाद की स्थिति को बचाया और हर जाँच संवाद दिखाई हो जाता है ... आपके प्रश्न का उत्तर है है? :-) – gilaras
आप संवाद के लिए स्क्रीन पर स्थान निर्दिष्ट क्यों नहीं करते? –