import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; /* * The main work of the application is done in this JPanel-extending class. * This allows the java class to be run as a stand-alone application or * as an applet within a web browser. */ class RetirementCalculatorPanel extends JPanel implements ActionListener { private RetirementCalculatorModel myModel; private JComponent makeDivider() { return new JLabel(" "); } private HashMap myFields; public RetirementCalculatorPanel() { super(new BorderLayout()); myFields = new HashMap(); JPanel inner = new JPanel(new GridBagLayout()); class ComboChoice { private String myDesc; private int myVal; ComboChoice(int val, String desc) { myDesc = desc; myVal = val; } public String toString() { return myDesc; } public int getVal() { return myVal; } } JComponent field; GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.ipadx = 2; c.gridwidth = 1; c.gridheight = 1; c.gridx = 0; c.gridy = 0; c.weightx = 0.0; inner.add(new JLabel("What is your name?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; field = new JTextField(); inner.add(field, c); c.gridx--; c.gridy++; c.weightx = 0.0; inner.add(new JLabel("How much annual income will you want in retirement?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; field = new JTextField(); myFields.put("income wanted", field); inner.add(field, c); c.gridx--; c.gridy++; c.weightx = 0.0; inner.add(new JLabel("What is your current annual income?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; field = new JTextField(); myFields.put("current income", field); inner.add(field, c); c.gridx--; c.gridy++; c.gridwidth = 2; inner.add(makeDivider(), c); c.gridy++; inner.add(new JLabel("What is your expected annual income after retirement -"), c); c.gridwidth = 1; c.gridy++; c.weightx = 0.0; inner.add(new JLabel(" - from an employer pension plan?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; field = new JTextField(); myFields.put("employer pension", field); inner.add(field, c); c.gridx--; c.gridy++; c.weightx = 0.0; inner.add(new JLabel(" - from a part-time job?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; field = new JTextField(); myFields.put("part time income", field); inner.add(field, c); c.gridx--; c.gridy++; c.weightx = 0.0; inner.add(new JLabel(" - other?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; field = new JTextField(); myFields.put("other income", field); inner.add(field, c); c.gridx--; c.gridy++; c.gridwidth = 2; inner.add(makeDivider(), c); c.gridwidth = 1; c.gridy++; c.weightx = 0.0; inner.add(new JLabel("How much savings do you have to date?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; field = new JTextField(); myFields.put("savings", field); inner.add(field, c); c.gridx--; c.gridy++; c.weightx = 0.0; inner.add(new JLabel("At what age do you expect to retire?", SwingConstants.RIGHT), c); c.gridx++; c.weightx = 1.0; ComboChoice[] retirement_age_choices = { new ComboChoice(55, "55"), new ComboChoice(60, "60"), new ComboChoice(65, "65"), new ComboChoice(70, "70") }; field = new JComboBox(retirement_age_choices); myFields.put("retirement age", field); inner.add(field, c); c.gridx--; c.gridy++; JPanel p = new JPanel(new BorderLayout()); p.setAlignmentX(Component.RIGHT_ALIGNMENT); p.add(new JLabel("What is your life expectancy?", SwingConstants.RIGHT), BorderLayout.CENTER); ComboChoice[] life_expectancy_choices = { new ComboChoice(82, "82 (Male; 50th percentile)"), new ComboChoice(86, "86 (Female; 50th percentile)"), new ComboChoice(89, "89 (Male; 75th percentile)"), new ComboChoice(92, "92 (Female; 75th percentile)"), new ComboChoice(94, "94 (Male; 90th percentile)"), new ComboChoice(97, "97 (Female; 90th percentile)") }; field = new JComboBox(life_expectancy_choices); myFields.put("life expectancy", field); p.add(field, BorderLayout.EAST); c.gridwidth = 2; inner.add(p, c); c.gridwidth = 1; c.gridy++; c.gridwidth = 2; inner.add(makeDivider(), c); c.gridwidth = 1; c.gridy++; JPanel buttons = new JPanel(); buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS)); buttons.add(Box.createHorizontalGlue()); JButton button = new JButton("Calculate"); buttons.add(button); button = new JButton("Print"); buttons.add(Box.createRigidArea(new Dimension(5, 0))); buttons.add(button); button = new JButton("Reset"); buttons.add(Box.createRigidArea(new Dimension(5, 0))); buttons.add(button); buttons.add(Box.createHorizontalGlue()); c.gridwidth = 2; inner.add(buttons, c); c.gridwidth = 1; c.gridy++; JScrollPane scrollpane = new JScrollPane(inner, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); add(scrollpane); } public void actionPerformed(ActionEvent e) { System.out.println("Event:"); System.out.println(e.getActionCommand()); System.out.println(e.paramString()); } } /* * The "main" class of this file allows the app to be run as an applet * but also provides a "main" method to run as an application. */ public class RetirementCalculator extends JApplet { final static private String PROG_NAME = "Josh's Retirement Calculator"; RetirementCalculatorPanel panel; public void init() { setLayout(new BorderLayout()); panel = new RetirementCalculatorPanel(); add(panel, BorderLayout.CENTER); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(PROG_NAME); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); RetirementCalculatorPanel panel = new RetirementCalculatorPanel(); frame.getContentPane().add(panel); frame.setPreferredSize(new Dimension(600, 450)); frame.pack(); frame.setVisible(true); } }); } }