import java.lang.reflect.InvocationTargetException;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class TestSwing
    extends javax.swing.JFrame
{
    public TestSwing()
    {
	JPanel p = new JPanel();
	JButton b = new JButton("Hello");
	p.add(b);
	final JTextArea a = new JTextArea(10,10);
	p.add(new JScrollPane(a));     
	add(p);
	pack();
	setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	b.addActionListener(new ActionListener()
	    {
		public void actionPerformed(ActionEvent e)
		{
		    a.append("Hello World!\n");
		}
	    });
	setVisible(true);
    }

    public static void main(String[] args)
	throws InterruptedException, InvocationTargetException
    {
	SwingUtilities.invokeAndWait(new Runnable()
	    {
		public void run()
		{
		    new TestSwing();
		}
	    });
    }

}
