/* * Swing version */ import javax.swing.*; import java.awt.Dimension; import java.awt.BorderLayout; import java.awt.event.*; public class ComponentEventDemo extends JApplet implements ComponentListener, ActionListener { JTextArea display; JFrame aFrame; public boolean showIt = false; final static String SHOW = "show"; final static String CLEAR = "clear"; String newline = "\n"; public void init() { display = new JTextArea(); display.setEditable(false); JScrollPane scrollPane = new JScrollPane(display); scrollPane.setPreferredSize(new Dimension(200, 75)); getContentPane().add(scrollPane, BorderLayout.CENTER); JButton b1 = new JButton("Start playing..."); b1.setActionCommand(SHOW); b1.addActionListener(this); getContentPane().add(b1, BorderLayout.NORTH); JButton b2 = new JButton("Clear"); b2.setActionCommand(CLEAR); b2.addActionListener(this); getContentPane().add(b2, BorderLayout.SOUTH); aFrame = new JFrame("A Frame"); ComponentPanel p = new ComponentPanel(this); aFrame.addComponentListener(this); p.addComponentListener(this); aFrame.getContentPane().add(p, BorderLayout.CENTER); aFrame.pack(); aFrame.addWindowListener(new WindowAdapter() { // This event handler is executed before the // default close operation (hide) is applied. public void windowClosing(WindowEvent e) { showIt = false; } }); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand() == SHOW) { showIt = true; aFrame.setVisible(true); } else { //CLEAR display.setText(""); } } public void stop() { SwingUtilities.invokeLater(new Runnable() { public void run() { aFrame.setVisible(false); } }); } public void start() { SwingUtilities.invokeLater(new Runnable() { public void run() { if (showIt) { aFrame.setVisible(true); } } }); } protected void displayMessage(String message) { display.append(message + newline); } public void componentHidden(ComponentEvent e) { displayMessage("componentHidden event from " + e.getComponent().getClass().getName()); } public void componentMoved(ComponentEvent e) { displayMessage("componentMoved event from " + e.getComponent().getClass().getName()); } public void componentResized(ComponentEvent e) { displayMessage("componentResized event from " + e.getComponent().getClass().getName()); } public void componentShown(ComponentEvent e) { displayMessage("componentShown event from " + e.getComponent().getClass().getName()); } } class ComponentPanel extends JPanel implements ItemListener { JLabel label; JCheckBox checkbox; ComponentPanel(ComponentEventDemo listener) { super(new BorderLayout()); label = new JLabel("This is a Label", JLabel.CENTER); add(label, BorderLayout.CENTER); checkbox = new JCheckBox("Label visible", true); checkbox.addItemListener(this); add(checkbox, BorderLayout.SOUTH); label.addComponentListener(listener); checkbox.addComponentListener(listener); } public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { label.setVisible(true); //Need to revalidate and repaint, or else the label //will probably be drawn in the wrong place. label.revalidate(); label.repaint(); } else { label.setVisible(false); } } }