Un ejercicio perteneciente a un examen de Java. Los eventos se han implementado mediante clases anónimas.
Enunciado: Codifica un applet para la caja de una frutería que “pesa” la fruta e imprime el coste. La frutería vende 9 clases de frutas. Antes de imprimir el coste de la fruta comprada debemos: pulsar el botón PESAR, pulsar el botón de la fruta adquirida, introducir el peso de la misma (en kg.) y pulsar la tecla Intro. Solo entonces podemos imprimir. Además escribimos una línea en la consola con el peso de la fruta comprada, su precio unitario y el total (producto del peso por el precio). El precio (en euros) de un kg. de cada una de las frutas es:
| Fruta | Manzana | Pera | Naranja | Kiwi | Limón | Plátano | Uva | Piña | Melocotón |
|---|---|---|---|---|---|---|---|---|---|
| Precio/kg | 2.70 | 2.50 | 3.50 | 4.50 | 3.00 | 4.00 | 6.00 | 5.00 | 7.00 |
Ejemplo:
Posible resolución:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class CajaApplet extends Applet {
// Se declara cada componente
Label lCoste, lPeso, lMensaje;
Button botonFruta[];
Button bPesar, bImprimir;
TextField tfCoste, tfPeso;
Panel pNorte, pCentro, pSur;
// Array de String con los nombres para los botones de frutas
String frutas[] = {"Manzana", "Pera", "Naranja", "Kiwi", "Limón", "Plátano",
"Uva", "Piña", "Melocotón"};
// Array de double con los precios por kilo de cada fruta
double precios[] = {2.7, 2.5, 3.5, 4.5, 3, 4, 6, 5, 7};
int seleccion = 0; // número del array actualmente seleccionado
boolean pesando = false; // determina si se ha pulsado el botón PESAR
boolean frutaPulsada = false; // determina si se ha pulsado una fruta
public void init() {
// Creación de un panel con un Label y un TextField, que se coloca en
// la parte norte del Applet, definido como BorderLayout
setLayout(new BorderLayout());
pNorte = new Panel();
lCoste = new Label("COSTE");
tfCoste = new TextField(10);
tfCoste.setEnabled(false);
pNorte.add(lCoste);
pNorte.add(tfCoste);
// Creación de un panel y de un array de botones, para las frutas,
// el cuál se coloca en la parte central del Applet.
botonFruta = new Button[frutas.length];
// El panel se establece con un administrador de diseño GridLayout
// de 4 filas y 3 columnas
pCentro = new Panel(new GridLayout(4, 3));
for (int i = 0; i < frutas.length; i++) {
botonFruta[i] = new Button(frutas[i]);
// A cada botón se le añade un 'escuchador de acción'
// (new ActionListener) mediante el método addActionListener.
// ActionListener es una interface y por tanto hay que escribir
// sus métodos, en este caso el método actionPerformed
botonFruta[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// comando contiene el nombre de comando asociado a
// la acción ejecutada
String comando = e.getActionCommand();
if (pesando) {
for (int i = 0; i < frutas.length; i++) {
if (comando.equals(botonFruta[i].getLabel())) {
seleccion = i;
frutaPulsada = true;
lMensaje.setText("Introduzca el peso en kilos");
tfPeso.setEnabled(true);
}
}
}
}
});
pCentro.add(botonFruta[i]);
}
bPesar = new Button("PESAR");
bPesar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
pesando = true;
tfPeso.setText("");
tfCoste.setText("");
lMensaje.setText("Pulse una Fruta");
}
});
bImprimir = new Button("IMPRIMIR");
bImprimir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if ((!tfPeso.getText().equals("")) && frutaPulsada) {
double total;
total = Double.parseDouble(tfPeso.getText()) * precios[seleccion];
total = Math.rint(total * 100) / 100;
tfCoste.setText(String.valueOf(total) + " €");
pesando = false;
frutaPulsada = false;
lMensaje.setText("Pulse PESAR");
tfPeso.setEnabled(false);
}
}
});
pCentro.add(bPesar);
pCentro.add(bImprimir);
pSur = new Panel();
tfPeso = new TextField(8);
tfPeso.setEnabled(false);
tfPeso.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (frutaPulsada) {
lMensaje.setText("Pulse Intro tras la cantidad");
}
}
});
tfPeso.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
lMensaje.setText("Pulse IMPRIMIR para ver el coste");
}
});
lPeso = new Label("PESO");
lMensaje = new Label("Pulse PESAR ");
pSur.add(tfPeso);
pSur.add(lPeso);
pSur.add(lMensaje);
add(pNorte, BorderLayout.NORTH);
add(pCentro, BorderLayout.CENTER);
add(pSur, BorderLayout.SOUTH);
}
}

14 diciembre 2011 a las 23:20 pm
Hola no funciona.