gezeigt ich eine wirklich große Anwendung, die mehrere Dialoge hat. Meine Aufgabe ist es, sicherzustellen, dass ein Dialog, der nicht vollständig sichtbar ist (weil der Benutzer ihn aus dem sichtbaren Bildschirmbereich herausgezogen hat) zurück in die Mitte des Bildschirms bewegt wird.Wie auf dem ein JDialog screenen, um herauszufinden, ist
das kein Problem ist, wenn ich mit einem Bildschirm nur zu tun bin. Es funktioniert gut ... aber die meisten Benutzer dieser Anwendung haben zwei Bildschirme auf dem Desktop ...
Wenn ich versuche herauszufinden, auf welchem Bildschirm der Dialog angezeigt wird und es auf diesem bestimmten Bildschirm zu zentrieren,. .. Nun, es ist tatsächlich zentriert, aber auf dem primären Bildschirm (der möglicherweise nicht auf dem Bildschirm angezeigt wird).
Um Ihnen zu zeigen, was meine Gedanken waren so weit, hier ist der Code ...
/**
* 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);
}
Während ich von Debug-Art über die Tatsache kam, dass getActiveScreen()
nicht die Art, wie ich scheint allerdings zu arbeiten; es scheint immer 2 zurück zu geben (was eine Art Mist ist, da es bedeuten würde, dass der Dialog immer im zweiten Monitor angezeigt wird ... was natürlich nicht die Wahrheit ist).
Jeder bekam eine Ahnung, wie mein Dialog auf dem Bildschirm zu zentrieren es auf tatsächlich gezeigt wird?
Wie viele Bildschirme werden auf mehreren Displays angezeigt? –
Ich bin mir nicht ganz sicher, ob ich deine Frage bekomme, aber wenn ich es richtig verstanden habe, ... ich weiß es nicht. Es spielt keine Rolle, denn die Position der Dialoge wird gespeichert und überprüft, sobald der Dialog sichtbar wird ... beantwortet das Ihre Frage? :-) – gilaras
Warum gibst du keinen Ort auf dem Bildschirm für den Dialog an? –