Olá Nicéia, como está?
 
Olha, se você quer é que o visor da calculadora fique em um applet e os botões em outros, basta criar as classes do jeito que quer, ou seja, uma só com o visor, outra só com os botões. Para atribuir o valor dos botões ao visor você usará JavaScript da seguinte forma:
 
Se estiver confuso, te explico melhor.
 
 
//------------------------ Este código ficará no applet dos botões. --------------------------------------------
import netscape.javascript.*;

(...)
 
//Este método fará as chamadas da função atribuirValorApplet()
public void atribuirValor(String valor){
 
   try{
 
      win = JSObject.getWindow(this);
 
   }
   catch(JSException e){
 
      exibirErro(ejs.toString());
      return;
 
   }
 
   try{
 
      Object msgErro[] = new Object[1];
 
      msgErro[0] = valor;
 
      Object obj = win.call("atribuirValorApplet", msgErro);
 
   }
   catch(JSException ejs){
 
      exibirErro(ejs.toString());
      return;
 
   }
 
}
 
public void exibirErro(String erro){
 
   getAppletContext().showStatus(erro);
 
}
//------------------------------- Final do código no applet dos botoes --------------------------------------------------
 

//------------------------------- Este código fica no applet do visor --------------------------------------------------
 
public setValor(String valor){
 
  nomeDoSeuTextField.setText(valor);
 
}
 
//------------------------------- Final do código no applet do visor --------------------------------------------------
 
 
<!-- Este código ficará no HTML onde estão os applets -->
<script language="JavaScript">
 
function atribuirValorApplet(valor){
 
   var appletVisor = document.getElementById("idDoAppletDoVisor"); //Este id é o atributo id="nomeDoApplet" na tag applet. Desta forma funcionará independente se o usuário usa Java Plug-in ou JVM normal.
 
   if(appletVisor){
 
      appletVisor.setValor(valor);
 
   }
 
}
 
</script>
<!-- Final do código no HTML -->
 
Qualquer  dúvida, pode perguntar.
 
Lincolm Ferreira de Aguiar
WebMaster - QueroProgramar
[EMAIL PROTECTED]
 
 
Original Message -----
From: Nijava
Sent: Thursday, January 24, 2002 2:03 PM
Subject: [java-list] Applets que se comunicam

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