Удаление JFrame щелчком из внутренней панели JPanel

Я пытаюсь избавиться от своего JFrame, нажав кнопку, расположенную на панели JPanel, которая размещена на JFrame, который я хочу закрыть.

Я попытался создать статический метод в классе JFrame, но, конечно же, моя IDE сказала мне, что этого не произойдет.

Кто-нибудь думает о решении?

Спасибо!


person Jeroen    schedule 01.03.2010    source источник


Ответы (2)


Попробуй это:

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);
            }
        });
    }
}
person Cesar    schedule 01.03.2010

Сделайте что-то вроде этого:

JButton closeFrameButton = new JButton("Close");
closeFrameButton.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        ((Window) getRootPane().getParent()).dispose();
    }
});
person user3764178    schedule 22.06.2014
comment
Ответы с работающим кодом хороши, когда у них есть объяснения, почему это работает, они еще лучше. (Кстати, добро пожаловать в Stack Overflow) - person indivisible; 22.06.2014
comment
Вызов getTopLevelAncestor безопаснее. чем предположить, что JRootPane является прямым дочерним элементом окна. На самом деле, если компонент находится в JInternalFrame, этот код вообще не будет работать. - person VGR; 12.12.2015