我希望在应用程序前面显示警告showConfirmDialog窗口,即使GUI移动到不同的位置,如果我不移动application并按下关闭ALT + X&,它也能正常工作#39;按钮,但如果我将应用程序移动到第二个屏幕,警告showConfirmDialog窗口保持在旧位置,如何随GUI一起移动警告窗口,请给我指示,谢谢。
关闭ALT + X按钮
//close window button
JButton btnCloseWindow = new JButton("Close ALT+X");
btnCloseWindow.setMnemonic('x');
btnCloseWindow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFrame frame = new JFrame();
int result = JOptionPane.showConfirmDialog(frame, "Are you sure you want to close the application?", "Please Confirm",JOptionPane.YES_NO_OPTION);
//find the position of GUI and set the value
//dialog.setLocation(10, 20);
if (result == JOptionPane.YES_OPTION)
System.exit(0);
}
});
到目前为止,我试图将GUI的位置中心设置为showConfirmDialog,但是没有用。
答案 0 :(得分:5)
JOptionPane应该相对于其父窗口定位自己。由于您使用新创建的和未显示的JFrame作为对话框的父窗口,因此对话框只知道在屏幕中居中。
所以这里的关键不是只使用任何旧的JFrame作为父窗口,而是使用当前显示的JFrame 或其显示的组件之一作为父组件,你的第一个参数JOptionPane.showConfirmDialog方法调用。
那么如果你让你的JButton最终并将其传递给你的方法调用呢?
// **** make this final
final JButton btnCloseWindow = new JButton("Close ALT+X"); // ***
// ....
btnCloseWindow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// JFrame frame = new JFrame(); // **** get rid of this ****
// ***** note change? We're using btnCloseWindow as first param.
int result = JOptionPane.showConfirmDialog(btnCloseWindow ,
"Are you sure you want to close the application?",
"Please Confirm",JOptionPane.YES_NO_OPTION);
// ......