猿问

更改了其中一个侦听器适合可见性的JPanel

是否有一些规则,或好/坏的经验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()");

        }


拉莫斯之舞
浏览 508回答 2
2回答

慕慕森

如果更改是通过“ setVisible(false)”方法进行的,请使用ComponentListener或ComponentAdapter。在“ componentHidden”中,您将收到隐藏组件的通知(称为“ setVisible(false)”),在“ componentShown”中,则显示该组件(称为“ setVisible(true)”)
随时随地看视频慕课网APP

相关分类

Java
我要回答