¡¡¡ ATENCIÓN QUE ESTE ES UN CONCEPTO MUY IMPORTANTE!!!
Cuando se hace cualquier programa con una Interfaz de Usuario, ya sea gráfica, ya sea una web, ya sea un applet se tiende muy facilmente a mezclar las operaciones de manipulación de la información (Lógica de negocio) con la presentación visual de esa información(Lógica de IU).
Esto es especialmente fácil que ocurra en el entorno web donde se tiende a mezclarlo todo. Y es un gran error. Si no se separan la lógica de negocio (donde tu procesas tus datos) con la lógica de presentación (la ventana, la web, etc donde presentas la información) el código resultante es UNA MIERDA PINCHADA EN UN PALO. Es un error que se suele cometer al empezar a programar y cuando todavía no se tiene mucha experiencia.
Por eso es muy bueno acostumbrarse a:
Por último:
Y una vez dado el sermón un ejemplito:
// Separacion.java
// 2 clases para separar la lógica de negocio de la de presentación
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.applet.*;
import net.juantxu.swing.*;
// clase de lógica de negocio
class LogicaNegocio{
private int modificador;
public LogicaNegocio(int mod){
modificador = mod;
}
public void establecerModificador(int mod){
modificador = mod;
}
public int obtenerModificador(){
return this.modificador;
}
// algunas operaciones (lógica de negocio)
public int calculo1(int i){
return i*this.modificador;
}
public int calculo2(int i){
return i+this.modificador;
}
}
// y ahora la interfaz
public class Separacion extends JApplet{
JTextField
t = new JTextField(15),
mod = new JTextField(15);
LogicaNegocio ln = new LogicaNegocio(2);
JButton
calc1 = new JButton("calculo 1"),
calc2 = new JButton("calculo 2");
static int obtenerValor(JTextField tf){
try{
return Integer.parseInt( tf.getText() );
}catch(NumberFormatException e){
return 0;
}
}
class Calc1Oyente implements ActionListener{
public void actionPerformed(ActionEvent e){
t.setText(Integer.toString(ln.calculo1( obtenerValor(t) ) ) );
}
}
class Calc2Oyente implements ActionListener{
public void actionPerformed(ActionEvent e){
t.setText(Integer.toString(ln.calculo2( obtenerValor(t) ) ) );
}
}
class ModL implements DocumentListener{
public void changedUpdate(DocumentEvent e){}
public void insertUpdate(DocumentEvent e){
ln.establecerModificador(obtenerValor(mod));
}
public void removeUpdate(DocumentEvent e){
ln.establecerModificador(obtenerValor(mod) );
}
}
public void init(){
Container cp = getContentPane();
cp.setLayout(new FlowLayout() );
cp.add(t);
calc1.addActionListener(new Calc1Oyente() );
calc1.setToolTipText("Texto Explicativo");
calc2.addActionListener(new Calc2Oyente() );
calc2.setToolTipText("Esto hará el calculo 2");
JPanel p1 = new JPanel();
p1.add(calc1);
p1.add(calc2);
cp.add(p1);
mod.getDocument().addDocumentListener(new ModL() );
JPanel p2 = new JPanel();
p2.add(new JLabel("Modificador : ") );
p2.add(mod);
cp.add(p2);
}
public static void main(String[] args){
Console.run(new Separacion(), 200, 280);
}
}
y aqui tienes como queda