Tengo una aplicación realmente grande que tiene varios cuadros de diálogo. Mi tarea es asegurarme de que un cuadro de diálogo, que no está completamente visible (porque el usuario lo sacó del área de la pantalla visible) se mueve de vuelta al centro de la pantalla.Cómo saber en qué pantalla se muestra un JDialog
No hay problema cuando trato con una sola pantalla. Funciona bien ... sin embargo, la mayoría de los usuarios de esta aplicación tienen dos pantallas en su escritorio ...
Cuando trato de averiguar en qué pantalla se muestra el cuadro de diálogo y centrarlo en esa pantalla específica,. .. bueno, realmente se CENTRA, pero en la pantalla principal (que puede no ser la pantalla en la que se muestra el cuadro de diálogo).
de mostrar lo que eran mis pensamientos hasta ahora, aquí está el código ...
/**
* 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);
}
Mientras se depura Yo como que encontramos en el hecho de que getActiveScreen()
no parece funcionar de la manera que aunque; parece que siempre devuelve 2 (lo cual es una porquería, ya que significa que el diálogo siempre se muestra en el segundo monitor ... lo que por supuesto no es la verdad).
¿Alguien tiene alguna idea de cómo centrar mi cuadro de diálogo en la pantalla en la que en realidad se muestra?
¿Cuántas pantallas se mostrarán en varias pantallas? –
No estoy seguro si recibo tu pregunta, pero si la entendí correctamente, ... No sé. Ni siquiera importa, porque la posición de los cuadros de diálogo se guarda y se comprueba cada vez que el cuadro de diálogo se vuelve visible ... ¿responde esto a su pregunta? :-) – gilaras
¿Por qué no especifica la ubicación en la pantalla para el diálogo? –