Окно событий для JFrames, которые скрыты/показаны через setVisible?
Какой вид слушателя мне нужно добавить в JFrame для обнаружения, когда он скрыт/показан через setVisible
?
Я попытался использовать WindowListener и windowOpened
и windowClosed
, но они работают только при первом открытии окна (windowOpened
) или, соответственно, при закрытии окна с использованием метода dispose (windowClosed
). Для меня этого недостаточно. Я хочу получать уведомления каждый раз, когда окно становится видимым и невидимым на экране с помощью setVisible
.
Есть ли стандартный способ качания для этого, или мне нужно сделать свой собственный (например, переопределив метод setVisible
)?
Ответы
Ответ 1
Попробуйте java.awt.event.ComponentListener. Вы можете добавить один, используя этот код (где window - имя JFrame):
window.addComponentListener(new ComponentAdapter() {
public void componentHidden(ComponentEvent e)
{
/* code run when component hidden*/
}
public void componentShown(ComponentEvent e) {
/* code run when component shown */
}
});
Ответ 2
1- Создайте класс, реализующий интерфейс ComponentListener, как в следующем примере:
//---------------------
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
public class winlistenner implements ComponentListener {
public void componentHidden(ComponentEvent arg0) {
// TODO Auto-generated method stub
System.out.print("Hided\r\n");
}
public void componentMoved(ComponentEvent arg0) {
// TODO Auto-generated method stub
System.out.print("Moved\r\n");
}
public void componentResized(ComponentEvent arg0) {
// TODO Auto-generated method stub
System.out.print("Resized\r\n");
}
public void componentShown(ComponentEvent arg0) {
// TODO Auto-generated method stub
System.out.print("Shown\r\n");
}
}
//------------------------------------------------------------------------
2- Теперь создайте геттер для вашего JFrame следующим образом:
public class JMain {
private JFrame frmNetworkshareMoon;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
public JFrame getFrmNetworkshareMoon() {
return frmNetworkshareMoon;
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JMain window = new JMain();
winlistenner listenner= new winlistenner();
window.getFrmNetworkshareMoon().addComponentListener(listenner);
window.frmNetworkshareMoon.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
//......
// the rest of your class code:
//...
}
3 - ваш основной пример, как показано выше, вы установите слушателя JFrame, который вы создали, и затем запустите программу, вы увидите сообщения, поступающие от слушателя:
Moved
Resized
Resized
Moved
Shown
Moved
Moved