Закрытие JFrame при щелчке мышью - PullRequest
2 голосов
/ 16 мая 2011

Эй, ребята, я хочу, чтобы мой JFrame закрывался по щелчку мыши. У меня есть код для этого, но он не работает ...

public void closeFrame ()
{

    jPanel.removeAll ();
    String x = "";
    JLabel exit = new JLabel ("Click Anywhere To Close!", JLabel.CENTER);
    exit.setPreferredSize (new Dimension (700, 100));
    jPanel.add (exit);
    jPanel.revalidate ();

    MouseListener ml = new MouseAdapter ()
    {
        public void mouseClicked (MouseEvent event)
        {
            //Put JFrame close code here
            dispose ();
            System.exit (0);
        }
    }
    ;
    addMouseListener (ml);
    validate (); //This hasn't made a difference :(

}

Класс расширяет JFrame, и он НЕ реализует MouseListener. Тем не менее, код не работает.

Вот так выглядит инициализация JFrame (надеюсь, это поможет) ...

public void createFrame ()
{
    new JFrame (":) :)");
    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    setVisible (true);
    //Some Initialization for jPanel variable
    getContentPane().add(jPanel);
    pack();
}

Как я могу заставить этот код работать и если я не могу, есть ли альтернативный способ закрытия по щелчку мыши?

--- EDIT ---

Спасибо, что на воздушной подушке полно угрей

MouseListener должен быть добавлен к JPanel

//WORKING CODE
public void closeFrame ()
{

    jPanel.removeAll ();
    String x = "";
    JLabel exit = new JLabel ("Click Anywhere To Close!", JLabel.CENTER);
    exit.setPreferredSize (new Dimension (700, 100));
    jPanel.add (exit);
    //jPanel.revalidate ();

    MouseListener ml = new MouseAdapter ()
    {
        public void mouseClicked (MouseEvent event)
        {
            //Put JFrame close code here
            dispose ();
            System.exit (0);
        }
    }
    ;
    jPanel.addMouseListener (ml);
    jPanel.revalidate ();

}

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Мне нужно задаться вопросом, не совпадает ли JFrame contentPane, к которому вы добавили MouseListener, с отображаемым JFrame, тем более что я вижу, как вы создаете новый JFrame в методе createFrame. Вы понимаете, что MouseListener будет работать только в том случае, если его добавить в визуализируемый компонент, верно?

Предложения:

  • нет вашего класса расширения JFrame
  • Добавьте свой MouseListener в JPanel, который вы добавляете в визуализированную панель содержимого JFrame.
  • Дайте вашему классу переменную JFrame, и пусть она ссылается на JFrame, который вы создаете в методе createFrame. Тогда вы можете распоряжаться этим JFrame по своему усмотрению.
  • Не забудьте вызвать setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) для визуализированного JFrame.
1 голос
/ 16 февраля 2014

Вот что я сделал.

btnClose = new JButton("Close");
btnClose.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
        dispose();
    }
});
btnClose.setBounds(253, 190, 75, 25);
contentPane.add(btnClose);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...