我有一个非常大的应用程序,它有多个对话框。我的任务是确保将不完全可见的对话框(因为用户将其拉出可见屏幕区域)移回屏幕中心。
当我只处理一个屏幕时,这没问题。它工作得很好......但是,这个应用程序的大多数用户在他们的桌面上有两个屏幕......
当我试图弄清楚对话框显示在哪个屏幕上并将其居中在该特定屏幕上时,...嗯,它实际上确实居中,但在主屏幕上(可能不是显示对话框的屏幕)。
为了向您展示我到目前为止的想法,这是代码...
/**
* 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(这是一种废话,因为这意味着对话框总是显示在第二个监视器中......这当然不是事实)。
任何人都知道如何将我的对话集中在实际显示的屏幕上?