//1.2, 1.3, and compatible releases. Works in 1.1 if you add //JFC/Swing 1.1. import javax.swing.*; import java.awt.*; import java.awt.event.*; public class InnerClassDemo2 { public Component createComponents() { JButton button = new JButton("Quit"); button.addActionListener(new MyActionListener()); JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder( 30, //top 30, //left 30, //bottom 30) //right ); pane.setLayout(new GridLayout(0, 1)); pane.add(button); return pane; } private class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { quit(); } } protected void quit() { System.exit(0); } public static void main(String[] args) { //Create the top-level container and add contents to it. JFrame frame = new JFrame("Inner Class Demo 2"); final InnerClassDemo2 app = new InnerClassDemo2(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); //Finish setting up the frame, and show it. frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { app.quit(); } }); frame.pack(); frame.setVisible(true); } }