import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ShakeyMessage extends JComponent implements Runnable, ActionListener { private Message message; private boolean stopped; private JButton button; public ShakeyMessage(String text) { message = new Message(text, 100, 200); setBackground(Color.BLACK); setFont(new Font("Serif", Font.BOLD, 36)); setLayout(new FlowLayout()); button = new JButton("Stop"); button.setFont(new Font("Serif", Font.BOLD, 24)); button.setBackground(Color.WHITE); button.setForeground(Color.RED); add(button); new Thread(this).start(); } public void run() { try { while (!stopped) { message.move(); Thread.sleep(100); repaint(); } } catch (InterruptedException e) {} } public void actionPerformed(ActionEvent e) { } public Dimension getPreferredSize() { return new Dimension(500, 300); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(getBackground()); Dimension size = getSize(); g.fillRect(0, 0, size.width, size.height); message.draw(g); } public static void main(String[] argv) { String frameTitle = "Shakey Message"; JFrame fr = new JFrame(frameTitle); JComponent comp = new ShakeyMessage("Happy Halloween!"); Dimension size = comp.getPreferredSize(); fr.setSize(size); fr.getContentPane().add(comp); fr.setVisible(true); } }