import java.awt.*; import java.awt.event.*; public class Calculator extends java.applet.Applet implements ContainerListener, ActionListener { GridBagConstraints gbc = new GridBagConstraints(); { gbc.weightx = 1.0; gbc.weighty = 1.0; gbc.fill = GridBagConstraints.BOTH; } TextField theDisplay = new TextField(); public void init() { setFont( new Font("Monospaced", Font.BOLD, 24) ); addContainerListener( this ); gbc.gridwidth=4; addGB( this, theDisplay, 0, 0 ); // make the top row Panel topRow = new Panel(); topRow.addContainerListener( this ); gbc.gridwidth = 1; gbc.weightx = 1.0; addGB( topRow, new Button("C"), 0, 0 ); gbc.weightx = 0.33; addGB( topRow, new Button("%"), 1, 0 ); gbc.weightx = 1.0; addGB( topRow, new Button("+"), 2, 0 ); gbc.gridwidth = 4; addGB( this, topRow, 0, 1 ); gbc.weightx = 1.0; gbc.gridwidth = 1; // make the digits for(int j=0; j<3; j++) for(int i=0; i<3; i++) addGB( this, new Button( "" + ((2-j)*3+i+1) ), i, j+2 ); // -, x, and divide addGB( this, new Button("-"), 3, 2 ); addGB( this, new Button("x"), 3, 3 ); addGB( this, new Button("\u00F7"), 3, 4 ); // make the bottom row Panel bottomRow = new Panel(); bottomRow.addContainerListener( this ); gbc.weightx = 1.0; addGB( bottomRow, new Button("0"), 0, 0 ); gbc.weightx = 0.33; addGB( bottomRow, new Button("."), 1, 0 ); gbc.weightx = 1.0; addGB( bottomRow, new Button("="), 2, 0 ); gbc.gridwidth = 4; addGB( this, bottomRow, 0, 5 ); } private void addGB( Container cont, Component comp, int x, int y ) { if ( ! (cont.getLayout() instanceof GridBagLayout) ) cont.setLayout( new GridBagLayout() ); gbc.gridx = x; gbc.gridy = y; cont.add( comp, gbc ); } public void componentAdded( ContainerEvent e ) { Component comp = e.getChild(); if ( comp instanceof Button ) ((Button)comp).addActionListener( this ); } public void componentRemoved( ContainerEvent e ) { } public void actionPerformed( ActionEvent e ) { if ( e.getActionCommand().equals("C") ) theDisplay.setText( "" ); else theDisplay.setText( theDisplay.getText() + e.getActionCommand() ); } }