import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.NumberFormat; import java.util.Locale; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class TipPanel extends JPanel { private final double PERCENTAGE = .2; JLabel prompt; JTextField data; JButton button; JTextField result; public TipPanel() { prompt = new JLabel("Enter Total of Bill:"); data = new JTextField(); data.setColumns(15); button = new JButton("Calculate Tip"); button.addActionListener(new ButtonListener()); result = new JTextField(); result.setColumns(20); result.setEditable(false); this.setLayout(new BorderLayout()); JPanel nsubpanel = new JPanel(); nsubpanel.setLayout(new GridLayout(1, 3)); nsubpanel.add(prompt); nsubpanel.add(data); nsubpanel.add(button); this.add(nsubpanel, BorderLayout.NORTH); this.add(result, BorderLayout.SOUTH); this.setPreferredSize(new Dimension(400, 100)); } private class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { double amount; try { amount = Double.parseDouble(data.getText()); } catch(NumberFormatException nfe) { result.setText("Invalid bill total"); data.setText(""); return; } double tip = (amount*PERCENTAGE); NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.getDefault() ); numberFormat.setMaximumFractionDigits(2); numberFormat.setMinimumFractionDigits(2); result.setText("Tip amount: " + numberFormat.format(tip)); data.setText(""); } } }