7
« en: 20 de Julio 2012, 10:37 »
Hola Charmedever:
En principio es que tenías mal programado el código. Creabas una variable precio internamente en el ActionListener en vez de coger la variable global.
También a la hora de calcular el precio, no lo multiplicabas por el valor del interes correspondiente, sino por 0.04%.
Para el plazo no utilizabas la misma variable sino tenias varias y despues el grupo de botones para los radio buttons no lo tenias creado, con lo cual podias piinchar a la vez en varios plazos.
Todo esto hacía además que no funcionara las cosas como debían.
Cuando nos enfrentamos a una aplicación ya de cierto tamaño, puede ser una tarea muy dura el enfrentarnos a todos los problemas de golpe, y es mejor ir pasito a pasito pero seguros de que el componente hace lo que tiene que hacer en tal evento, o que recuperamos el valor correspondiente en tal paso del código.
Seguramente se puede refinar todavía un poco más el código, pero te voy a pasar mi solución al problema.
Aunque antes yo si fuera tú, con los comentarios que te he echo antes, intentaría hacer la solución al problema por mi cuenta, así aprenderás mucho más.
A continuación mi solución por si te atascas espero te sirva de ayuda.
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
import javax.swing.border.Border;
class ExamenPractico extends JFrame
{
JPanel p1,p2,p3;
JLabel e1,e2,e3;
JComboBox cb;
JTextField t;
JCheckBox ck;
JRadioButton rb1,rb2,rb3;
ButtonGroup btgroup;
JButton b1,b2;
Border t1,t2,t3;
String articulo []= {"Pantalla LCD","Teatro en casa","Minicomponente"};
BorderLayout bL;
double precio; String producto; int plazo;
JTextArea txt;
ExamenPractico ()
{
p1 = new JPanel ();
t1 =BorderFactory.createTitledBorder("Articulo");
p1.setBorder(t1);
p2 = new JPanel ();
t2 =BorderFactory.createTitledBorder("Plazo");
p2.setBorder(t2);
p3 = new JPanel ();
t3 =BorderFactory.createTitledBorder("Imprimir");
p3.setBorder(t3);
e1 = new JLabel ("Descripcion");
e2 = new JLabel ("Precio $");
e3 = new JLabel ("Interes");
cb = new JComboBox (articulo);
t = new JTextField (10);
ck = new JCheckBox ("4%",true);
rb1 = new JRadioButton ("6 meses",false);
rb2 = new JRadioButton ("12 meses", false);
rb3 = new JRadioButton ("18 meses",false);
btgroup = new ButtonGroup();
btgroup.add(rb1);
btgroup.add(rb2);
btgroup.add(rb3);
b1 = new JButton ("Pago mensual");
b2 = new JButton ("Limpiar");
txt = new JTextArea ();
bL = new BorderLayout (10,10);
setLayout(bL);
add(p1);add(p2);add(p3);
p1.setLayout(new GridLayout(3,1));
p2.setLayout(new GridLayout (3,1));
p1.add(e1); p1.add(cb); p1.add(e2);p1.add(t); p1.add(e3); p1.add(ck);
p2.add(rb1); p2.add(rb2); p2.add(rb3);
p3.add(b1);p3.add(b2);
add (p1, BorderLayout.NORTH);
add (p2, BorderLayout.CENTER);
add (p3, BorderLayout.SOUTH);
t.addActionListener(new ActionListener ()
{
@Override
public void actionPerformed (ActionEvent r)
{
if (r.getSource()==t)
{
precio=Double.parseDouble(t.getText());
if(ck.isSelected())
{
precio=precio*1.04;
}
t.setText(String.valueOf(precio));
}
}
});
rb1.addItemListener (new ItemListener ()
{
@Override
public void itemStateChanged (ItemEvent i)
{
if (i.getSource()==rb1)
{
plazo = 6;
}
}
});
rb2.addItemListener (new ItemListener ()
{
@Override
public void itemStateChanged (ItemEvent i)
{
if (i.getSource()==rb2)
{
plazo = 12;
}
}
});
rb3.addItemListener (new ItemListener ()
{
@Override
public void itemStateChanged (ItemEvent i)
{
if (i.getSource()==rb3)
{
plazo = 18;
}
}
});
b1.addActionListener(new ActionListener ()
{
double pagomensual;
@Override
public void actionPerformed (ActionEvent c)
{
if (c.getSource()==b1)
{
pagomensual=precio/plazo;
JOptionPane.showMessageDialog(txt, "Articulo: "+cb.getSelectedItem().toString() +"\n" +"Plazo: "+plazo +" meses. Pago mensual: "+pagomensual);
}
}
});
}
}
public class Programa
{
public static void main (String []args)
{
ExamenPractico e = new ExamenPractico ();
e.setTitle("Punto de Venta");
e.setVisible(true);
e.setSize(900,500);
e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}