在父项上居中 JDialog
2022-09-01 05:31:29
我有一个Java swing应用程序,带有一个按钮,当执行某个操作时,它会生成一个弹出窗口。我想在呈现时将弹出窗口的中心点与父窗口的中心点对齐。如何计算要插入弹出窗口的x,y坐标?setLocation()
只是为了澄清。我不希望的行为,因为这会将弹出窗口的左上角像素设置为父帧的中心像素上。我想将弹出窗口的中心像素设置为父帧的中心像素。setLocationRelativeTo()
我有一个Java swing应用程序,带有一个按钮,当执行某个操作时,它会生成一个弹出窗口。我想在呈现时将弹出窗口的中心点与父窗口的中心点对齐。如何计算要插入弹出窗口的x,y坐标?setLocation()
只是为了澄清。我不希望的行为,因为这会将弹出窗口的左上角像素设置为父帧的中心像素上。我想将弹出窗口的中心像素设置为父帧的中心像素。setLocationRelativeTo()
在您创建的 上,您应该先调用,然后调用 , 然后调用 。按照该顺序,应以父框架为中心显示。JDialog
pack()
setLocationRelativeTo(parentFrame)
setVisible(true)
JDialog
如果您不先打电话,则相对于父级设置位置将无法正常工作,因为不知道此时它的大小。它似乎将大小设置为 0 x 0,这会导致“弹出窗口的左上角像素位于父级的中心像素上方”,该位置在其他答案之一的注释中提到。pack()
JDialog
setLocationRelativeTo
..这会将弹出窗口的左上角像素设置为父项的中心像素上方。..
不,它没有!
据我所知,这个简单示例弹出的3个对话框中的每一个似乎都是居中。我只能猜测代码在错误的时间调用。setLocationRelativeTo
import javax.swing.*;
class CenterTheDialog {
CenterTheDialog() {
for (int ii=1; ii<4; ii++) {
JFrame f = new JFrame("Frame " + ii);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setSize(400,300);
f.setLocationByPlatform(true);
f.setVisible(true);
JDialog d = new JDialog(f);
d.setSize(300,200);
d.setLocationRelativeTo(f);
d.setVisible(true);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new CenterTheDialog();
});
}
}