我通常依靠setLocationRelativeTo(null)
将我的对话框定位在屏幕中央,但最近我得到了第二台显示器,这种方法总是将我的对话框中心设置在主显示器上,即使主窗口在第二台显示器上也是如此。
我知道这是一件愚蠢的事情,但它让我很恼火。除了设置相对于主屏幕的位置之外,还有什么解决方案吗?我从来没有这样做过。
我通常依靠setLocationRelativeTo(null)
将我的对话框定位在屏幕中央,但最近我得到了第二台显示器,这种方法总是将我的对话框中心设置在主显示器上,即使主窗口在第二台显示器上也是如此。
我知道这是一件愚蠢的事情,但它让我很恼火。除了设置相对于主屏幕的位置之外,还有什么解决方案吗?我从来没有这样做过。
我知道这个问题很老......但对于像我这样的其他疯狂程序员:
创建自己的类,扩展 JDialog 并使用 super(Frame, Modal)。
这对我有用:
import java.io.File;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
public class GFileChooserDialog extends JDialog {
private JFileChooser fileChooser;
private File file;
public GFileChooserDialog(JFrame relativeTo) {
super(relativeTo, true);
this.setAlwaysOnTop(true);
this.fileChooser = new JFileChooser();
this.getContentPane().setSize(450, 300);
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
}
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}
使用Singelton-Pattern作为主框架,您可以像这样调用对话框:
new GFileChooserDialog(Singelton.getInstance());
如果要在屏幕中央完美显示 JDialog,请不要使用 setLocationRelativeTo。而是覆盖其绘制方法并设置位置:
@Override
public void paint(Graphics g) {
super.paint(g);
Rectangle screen = this.getGraphicsConfiguration().getBounds();
this.setLocation(
screen.x + (screen.width - this.getWidth()) / 2,
screen.y + (screen.height - this.getHeight()) / 2
);
}