将预定义操作与关闭按钮Java JDialog相关联

时间:2014-09-11 11:59:36

标签: java swing button action jdialog

我在与JDialog相同的包中定义了一个动作。我想将Java Dialog的关闭按钮绑定到此操作,而不使用窗口侦听器。只需将此操作设置为按钮即可。你能帮帮我吗?谢谢

2 个答案:

答案 0 :(得分:1)

以下代码应使用WindowAdapter作为WindowListener来实现所需。按下关闭按钮后,只需调用一次 windowClosing 方法。如果您打算添加一个替代的Close-Button,您可以随时触发windowClosing事件,而不需要单独处理它。

import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDialog;
import javax.swing.WindowConstants;
public class DummyDialog extends JDialog {

DummyDialog() {
    this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    this.addWindowListener(new WindowAdapter() {

        @Override
        public void windowClosing(WindowEvent arg0) {
             System.out.println("Window closing");
        }



    });

}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                DummyDialog d = new DummyDialog();
              d.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

}

答案 1 :(得分:1)

默认情况下,Swing将使用您运行的操作系统的小部件,因此您无法访问该按钮,因为它不是Swing组件。

如果您想使用Swing LAF,则可以访问关闭按钮并将ActionListener添加到按钮。代码是:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DialogCloseAction
{
    private static void createAndShowGUI()
    {
        JDialog.setDefaultLookAndFeelDecorated(true);
        JDialog dialog = new JDialog();
        dialog.setDefaultCloseOperation( JDialog.DISPOSE_ON_CLOSE );
        dialog.setSize(200, 200);
        dialog.setLocationRelativeTo(null);
        dialog.setVisible( true );

        Action close = new AbstractAction()
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("closing...");
            }
        };

        JButton button = SwingUtils.getDescendantOfType(
            JButton.class, dialog.getRootPane(), "Icon", UIManager.getIcon("InternalFrame.closeIcon"));
        button.addActionListener( close );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

您需要使用Darryl的Swing Utils类来搜索自定义按钮的框架。

否则,正如已经建议的那样,您需要使用WindowListener。如果您愿意,可以查看Closing an Application,其中包含一个简单的API,可让您将操作添加到自定义CloseListener