代码之家  ›  专栏  ›  技术社区  ›  Jörg

显示JPanel时的火灾事件

  •  0
  • Jörg  · 技术社区  · 4 年前

    每当显示扩展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 当显示其面板时。还有其他办法吗?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Jörg    4 年前

    看起来AncestorListener或PropertyChangeListener可以完成此工作。