import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * Tests the custom component classes MirrorText and StopWatchLabel * by adding them both to a panel. The panel also contains a button * that changes the text on the MirrorText component (and also on * the button itself. This program also demonstrates how the layout * of the panel is recomputed when the components are changed. */ public class CustomComponentTest extends JPanel { /** * The main routine simply opens a window that shows a CustomComponentTest panel. */ public static void main(String[] args) { JFrame window = new JFrame("CustomComponentText"); CustomComponentTest content = new CustomComponentTest(); window.setContentPane(content); window.setSize(420,150); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); window.setLocation( (screenSize.width - window.getWidth())/2, (screenSize.height - window.getHeight())/2 ); window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); window.setVisible(true); } private MirrorText greet; private StopWatchLabel timer; private JButton changeText; public CustomComponentTest() { setLayout(new FlowLayout()); greet = new MirrorText("PLEASE LET ME OUT!"); greet.setBackground(Color.black); greet.setForeground(Color.red); greet.setFont( new Font("SansSerif", Font.BOLD, 30) ); add(greet); timer = new StopWatchLabel(); timer.setBackground(Color.white); timer.setForeground(Color.blue); timer.setOpaque(true); timer.setFont(new Font("Serif", Font.PLAIN, 20)); add( timer ); changeText = new JButton("Change Text in this Program"); add(changeText); changeText.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { if (greet.getText().equals("PLEASE LET ME OUT!")) greet.setText("Help!"); else greet.setText("PLEASE LET ME OUT!"); if (timer.isRunning() == false) timer.setText("Please click me."); if (changeText.getText().equals("Change Back")) changeText.setText("Change Text in this Program"); else changeText.setText("Change Back"); } } ); } }