将JOptionPane的showConfirmDialog与Java Application一起移动

时间:2014-12-02 12:20:43

标签: java swing user-interface jbutton joptionpane

我希望在应用程序前面显示警告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,但是没有用。

1 个答案:

答案 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);

        // ......