我需要将哪种类型的听众添加到JFrame
以检测何时隐藏或通过setVisible
显示?
我尝试使用WindowListener
以及windowOpened
和windowClosed
方法,但它们只适用于第一次打开一个窗口({{ 1}})或者,分别在使用dispose方法(windowOpened
)关闭窗口时。这对我来说还不够。我希望每次使用windowClosed
在屏幕上显示和隐藏窗口时都会收到通知。
是否有标准的Swing方法来实现这一目标,或者我是否需要自己创建(通过,例如,覆盖setVisible
方法)?
答案 0 :(得分:28)
尝试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 */
}
});
答案 1 :(得分: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创建一个getter:
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