是否有一些规则,或好/坏的经验AncestorListener,ComponentListener或HierarchyListener听与变化的知名度JPanel和JComponents?其中一个比其他更好或更安全吗?我特别想知道何时JPanel/ 如何JComponent隐藏/ 。请注意,以下代码包含不正确的Swing规则,例如Thread.sleep(int)在这种情况下使用,以允许我Listeners在Swing GUI中打印出正确的顺序import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.event.ComponentEvent;import java.awt.event.ComponentListener;import java.awt.event.HierarchyEvent;import java.awt.event.HierarchyListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;public class CardlayoutTest extends JFrame { private static final long serialVersionUID = 1L; public CardLayout card = new CardLayout(); public CardlayoutTest() { JPanel pnlA = new JPanel(new BorderLayout()); pnlA.add(new JButton("A"), BorderLayout.CENTER); JPanel pnlB = new JPanel(new BorderLayout()); pnlB.add(new JButton("B"), BorderLayout.CENTER); JPanel pnlC = new JPanel(new BorderLayout()); pnlC.add(new JButton("C"), BorderLayout.CENTER); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(card); add(pnlA, "A"); add(pnlB, "B"); add(pnlC, "C"); pnlA.addAncestorListener(new EventHandler()); pnlB.addAncestorListener(new EventHandler()); pnlC.addAncestorListener(new EventHandler()); pnlA.addHierarchyListener(new EventHandler()); pnlB.addHierarchyListener(new EventHandler()); pnlB.addHierarchyListener(new EventHandler()); pnlA.addComponentListener(new EventHandler()); pnlB.addComponentListener(new EventHandler()); pnlB.addComponentListener(new EventHandler()); } class EventHandler implements AncestorListener, ComponentListener, HierarchyListener { @Override public void ancestorAdded(AncestorEvent event) { System.out.println("CardlayoutTest.EventHandler.ancestorAdded()"); }
2 回答

慕慕森
TA贡献1856条经验 获得超17个赞
如果更改是通过“ setVisible(false)”方法进行的,请使用ComponentListener或ComponentAdapter。在“ componentHidden”中,您将收到隐藏组件的通知(称为“ setVisible(false)”),在“ componentShown”中,则显示该组件(称为“ setVisible(true)”)
添加回答
举报
0/150
提交
取消