/** * @version 1.20 27 Jun 1998, DB 11/2004 * @author DB, d'après Cay Horstmann */ import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Panel; import java.awt.TextField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class CalculatorPanel extends JPanel implements ActionListener { public CalculatorPanel() { setLayout( new BorderLayout( 2, 2 ) ); display = new TextField( "0" ); display.setEditable( false ); display.setBackground( Color.white ); add( display, "North" ); Panel p = new Panel(); p.setBackground( Color.yellow ); p.setLayout( new GridLayout( 5, 4, 3, 3 ) ); String buttons = "789/456*123-0.^+"; for ( int i = 0; i < buttons.length(); i++ ) addButton( p, buttons.substring( i, i + 1 ) ); p.add( boutonEntr ); boutonEntr.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent evt ) { boutonEntrActionPerformed( evt ); } } ); p.add( boutonEgal ); boutonEgal.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent evt ) { boutonEgalActionPerformed( evt ); } } ); p.add( boutonClr ); boutonClr.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent evt ) { boutonClrActionPerformed( evt ); } } ); p.add( boutonMem ); boutonMem.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent evt ) { boutonMemActionPerformed( evt ); } } ); add( p, "Center" ); setPreferredSize( new Dimension( 200, 200) ); } // CalculatorPanel() private void addButton( Container c, String s ) { Button b = new Button(s); c.add(b); b.addActionListener(this); } // addButton() public void actionPerformed( ActionEvent evt ) { String s = evt.getActionCommand(); if ( '0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals(".") ) { if (start) display.setText( s ); else display.setText( display.getText() + s ); start = false; } else if (ok==false) { op = s.charAt(0); ok = true; } } // actionPerformed() private void boutonEntrActionPerformed( ActionEvent evt ) { if (ok1==false) { op1 = Double.parseDouble( display.getText() ); ok1 = true; } else if (ok2==false) { op2 = Double.parseDouble( display.getText() ); ok2 = true; } else display.setText( "déjà 2 nombres" ); start = true; } private void boutonEgalActionPerformed( ActionEvent evt ) { if (ok1 && ok && ok2 ) { String s = calculate(); displayText( s ); try { res = Double.parseDouble( s.substring( 1 + s.indexOf( "=" ) ) ); } catch( Exception E ) { System.out.println( "Format de sortie de calc() non respecté !" ); } // catch } // if } private void displayText( String s ) { display.setText( s ); } // displayText() private String calculate() { return MiniCalc.calc( op1, op2, op ); } // calculate() private void boutonClrActionPerformed( ActionEvent evt ) { displayText( "0" ); op1=0; op2=0; op=' '; ok1=false; ok2=false; ok=false; start=true; } private void boutonMemActionPerformed( ActionEvent evt ) { displayText( "0" ); op1=res; op2=0; op=' '; ok1=true; ok2=false; ok=false; start=true; } // Attributs private double op1, res, op2; char op; private boolean ok1=false, ok2=false, ok=false; private Button boutonEntr = new Button("Entr"); private Button boutonEgal = new Button("="); private Button boutonClr = new Button("C"); private Button boutonMem = new Button("M"); private TextField display; private double arg = 0; private boolean start = true; }