Button 通过从内部JPanel单击来处理JFrame

Button 通过从内部JPanel单击来处理JFrame,button,dispose,jframe,jpanel,disposing,Button,Dispose,Jframe,Jpanel,Disposing,我试图通过单击一个按钮来处理我的JFrame,该按钮位于放置在我要关闭的JFrame上的JPanel上 我试图在JFrame类上创建一个静态方法,但我的IDE当然告诉我这不会发生 有人想办法吗 谢谢 试试这个: public class DisposeJFrame extends JFrame{ JPanel panel = new JPanel(); JButton button = new JButton("Dispose JFrame"); public Disp

我试图通过单击一个按钮来处理我的JFrame,该按钮位于放置在我要关闭的JFrame上的JPanel上

我试图在JFrame类上创建一个静态方法,但我的IDE当然告诉我这不会发生

有人想办法吗

谢谢

试试这个:

public class DisposeJFrame extends JFrame{
    JPanel panel = new JPanel();
    JButton button = new JButton("Dispose JFrame");

    public DisposeJFrame(){
        super();
        setTitle("Hi");
        panel.add(button);
        add(panel);
        pack();

        button.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {
                dispose();
            }
        });
    }

    public static void main(String args[]){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                DisposeJFrame jf = new DisposeJFrame();
                    jf.setVisible(true);
            }
        });
    }
}

这样做:

JButton closeFrameButton = new JButton("Close");
closeFrameButton.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        ((Window) getRootPane().getParent()).dispose();
    }
});

有工作代码的答案很好,当他们解释了为什么工作时,他们会更好。欢迎使用Stack OverflowTo btwCalling比假设JRootPane是窗口的直接子窗口更安全。事实上,如果组件位于JInternalFrame中,则此代码根本无法工作。