Pessoal, tenho o exemplo abaixo de uma calculadora, utilizando um único Applet, como eu faria para que os botões da calculadora ficassem separados do resultado, utilizando para isso "Applets que se comunicam"?
    Nicéia
 
// Calculadora
import java.awt.*;
import java.awt.event.*;
 
class CalcListener implements ActionListener
{
    private TextArea display;
 
    protected double ultimoValor = 0, // penultimo valor usado
                     valor = 0; // valor mostrado no display
    protected char ultimaOp = ' '; //+,-,*,/
    protected boolean novoNumero = true, // proximo digito digitado
                      ultimoIgual = false; // permite repeticoes
    String displayMemo = "";
    double decimal = 1; // potencia a multiplicar digitos decimais
 
    CalcListener (TextArea ta)
    {
        display = ta;
    }
 
    private void operacao (String s)
    {
  displayMemo = s + '\n' + display.getText();
  display.setText(displayMemo);
 }
 

 private void resultado(double x)
 {
  valor = x;
  displayMemo = x + "" + '\n' + " = " + '\n' + display.getText();
  display.setText(displayMemo);
 }
 

    private void update (double x)
    {
     if (x == -1)
     {
   displayMemo = "";
   x = 0;
  }
  valor = x;
  display.setText(String.valueOf(valor) + '\n' + displayMemo);;
 }
 

    public void actionPerformed (ActionEvent ev)
    {
        String label = ev.getActionCommand(); //getActionCommand();
        char k = label.charAt(0);
        switch(k)
        {
            case '.':
                if (novoNumero)
                {
                    valor = 0;
                    novoNumero = false;
                }
                if (decimal ==1) // evita duplo uso
                    decimal = 10;
                break;
            case '0': case '1': case '2':
            case '3': case '4': case '5':
            case '6': case '7': case '8': case '9':
                // bug: digitar 0.000...x mostra apenas
                // "0" enquanto x != '0' nao e' digitado
                if (novoNumero)
                {
                    valor = 0;
                    novoNumero = false;
                }
                if (decimal > 1)
                {
                    valor = valor + (k - '0')/decimal;
                    decimal *=10;
                }
                else
                    valor = valor * 10 + (k - '0');
                    update(valor);
                    break;
 

            case 'C':
                update (-1);
                decimal = 1;
                break;
 
            case '+': case '-': case '*': case '/':
 
                ultimaOp = k; novoNumero = true;
                ultimoValor = valor;
                ultimoIgual = false;
                decimal = 1;
                operacao(k + "");
                break;
            case '=':
                if (! ultimoIgual)
                {
                    // para repetir ultima operacao, troca ultimo valor com valor
                    double ultimo = ultimoValor;
                    ultimoValor = valor;
                    valor = ultimo;
                }
                switch (ultimaOp)
                {
                    case '+':
                        resultado (valor + ultimoValor);
                        break;
                    case '-':
                        resultado (valor - ultimoValor);
                        break;
                    case '*':
                        resultado (valor * ultimoValor);
                        break;
                    case '/': // falta testar div por 0
                        resultado (valor / ultimoValor);
                        break;
                }
                novoNumero = true;
                ultimoIgual = true;
                decimal = 1;
        }
    }
}
 

public class CalcPad11 extends java.applet.Applet
{
    protected TextArea display;
    private void setButton(Container where,
                           GridBagLayout m,
                           GridBagConstraints c,
                           String name,
                           int x, int y,
                           int w, int h,
                           CalcListener c1)
    {
        c.gridx = x; c.gridy = y;
        c.gridwidth = w; c.gridheight = h;
        c.weightx = c.weighty = 1.0;
        Button b = new Button (name);
        m.setConstraints(b,c);
        where.add(b);
        b.addActionListener(c1);
    }
 
    public void init()
    {
        display = new TextArea(12,1);
        display.setForeground(Color.blue);
        display.setBackground(Color.white);
        display.setEditable(false);
 
        setLayout (new BorderLayout ());
        add ("North",display);
 
        Panel keypad;
        add("Center", (keypad = new Panel()));
 
        GridBagConstraints c;
        GridBagLayout manager = new GridBagLayout();
        keypad.setLayout (manager);
 
        c=new GridBagConstraints();
        c.fill = GridBagConstraints.BOTH;
 
        CalcListener c1 = new CalcListener(display);
 
        setButton (keypad,manager,c,"C",0,0,1,1,c1);
        setButton (keypad,manager,c,"/",1,0,1,1,c1);
        setButton (keypad,manager,c,"*",2,0,1,1,c1);
        setButton (keypad,manager,c,"-",3,0,1,1,c1);
        setButton (keypad,manager,c,"7",0,1,1,1,c1);
        setButton (keypad,manager,c,"8",1,1,1,1,c1);
        setButton (keypad,manager,c,"9",2,1,1,1,c1);
        setButton (keypad,manager,c,"4",0,2,1,1,c1);
        setButton (keypad,manager,c,"5",1,2,1,1,c1);
        setButton (keypad,manager,c,"6",2,2,1,1,c1);
        setButton (keypad,manager,c,"1",0,3,1,1,c1);
        setButton (keypad,manager,c,"2",1,3,1,1,c1);
        setButton (keypad,manager,c,"3",2,3,1,1,c1);
        setButton (keypad,manager,c,"+",3,1,1,2,c1);
        setButton (keypad,manager,c,"=",3,3,1,2,c1);
        setButton (keypad,manager,c,"0",0,4,2,1,c1);
        setButton (keypad,manager,c,".",2,4,1,1,c1);
    }
}

Responder a