Ho un'applicazione veramente grande che ha più finestre di dialogo. Il mio compito è quello di assicurarmi che una finestra di dialogo, che non è completamente visibile (perché l'utente l'abbia estratto dall'area dello schermo visibile), sia spostata al centro dello schermo.Come capire su quale schermata viene mostrato un JDialog
Questo non è un problema quando ho a che fare con uno solo schermo. Funziona bene ... tuttavia, la maggior parte degli utenti di questa applicazione ha due schermi sul desktop ...
Quando provo a capire su quale schermata viene mostrata la finestra di dialogo e la centrano su quella schermata specifica,. .. beh, in realtà fa centro, ma sulla schermata principale (che potrebbe non essere la schermata in cui viene mostrata la finestra di dialogo).
per mostrare ciò che i miei pensieri erano finora, ecco il codice ...
/**
* 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);
}
Durante il debug I tipi di sono imbattuto nel fatto che getActiveScreen()
non sembra lavorare il mio modo però; sembra sempre restituire 2 (che è una specie di schifo, dal momento che significherebbe che il dialogo è sempre mostrato nel secondo monitor ... che ovviamente non è la verità).
Qualcuno ha idea di come centrare il mio dialogo sullo schermo in cui è effettivamente mostrato?
Quante schermate verranno visualizzate su più schermi? –
Non sono sicuro di avere la tua domanda, ma se ho capito bene, ... non lo so. Non ha nemmeno importanza, perché la posizione delle finestre di dialogo viene salvata e controllata ogni volta che la finestra di dialogo diventa visibile ... questo risponde alla tua domanda? :-) – gilaras
Perché non si specifica la posizione sullo schermo per la finestra di dialogo? –