每当显示扩展JPanel(MyPanel)时,我都希望得到通知。
import java.awt.*;
//import java.awt.event.*;
import javax.swing.*;
public class FireOnShown extends JFrame {
public static final long serialVersionUID = 100L;
public FireOnShown() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(320, 240);
setLocation(800, 40);
add(new MyPanel("Hello"));
setVisible(true);
}
static public void main(String args[]) {
EventQueue.invokeLater(FireOnShown::new);
}
}
我尝试应用ComponentListener或重写setVisible(…),但都不起作用。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyPanel extends JPanel {
public static final long serialVersionUID = 50247L;
public MyPanel(String labelTxt) {
setPreferredSize(new Dimension(300, 40));
add(new JLabel(labelTxt));
addComponentListener(new ComponentListener() {
public void componentHidden(ComponentEvent e) {
}
public void componentMoved(ComponentEvent e) {
}
public void componentResized(ComponentEvent e) {
}
public void componentShown(ComponentEvent e) {
System.out.println("componentShown");
}
});
}
@Override
public void setVisible(boolean flag) {
System.out.println("Visible "+flag);
super.setVisible(flag);
}
}
还有[java教程]中的示例(
https://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html
)不会开火
componentShown
当显示其面板时。还有其他办法吗?