Foro sobre Java SE > Error en el Controlador.actionPerformed
Swing ya es MVC por diseño, no es necesario complicar tanto las cosas.
Ese action listener puedes incluirlo perfectamente en la clase Vista. Así se hace en el JDK, por si hay dudas.
public class Controlador implements ActionListener{
private Vista miVentana;
private Modelo miModelo;
public Controlador(Vista miVentana){
this.miModelo=miModelo;
this.miVentana=miVentana;
}
No asignas un valor a miModelo en ningún sitio, por eso el NPE.
"... poder reducir el codigo utilizando arrays en los JTextField..."
No entiendo lo que quieres hacer: el modelo de los JTextField no usa arrays
que error mas tonto gracias por solucionarlo
lo de ponerlo asi es porque al profesor le gusta asi y ay que hacerle caso .
con lo de los JTextField y arrays me refiero a esto
private void initJTextFields() {
cuadroTexto=new JTextField[9];
for(int cont=0;cont<5;cont++){
cuadroTexto[cont]=new JTextField();
panelSup.add(cuadroTexto[cont]);
}
asi seria para poner las 5 casillas en la clase vista. lo que no se es como seria en la clase controlador
El "gusto" de un profesor no puede convertirse en un criterio técnico. No hay ninguna justificación para ese "gusto", y sí una buena cantidad de inconvenientes.
Acabas de tropezar con uno de ellos: ¿cómo usar el mismo controlador externo para ese diseño de JTextField?, o ¿habrá que crear una clase externa controladora para cada JTextField?.
Me gustaría ver cómo tu profesor refactoriza su "gusto" para usar los nuevos lambdas de JavaSE 1.8 con esos controladores, por ejemplo (no se puede).
Se puede y debe usarse, o bien clases privadas internas, o clases anónimas, o lambdas: todas ellas debidamente encapsuladas e inaccesibles desde fuera de la clase principal. Eso sí es un criterio técnico, y no un "gusto".
Por lo que veo, este profesor tiene unos gustos muy raros, tal vez tiene algo escondido en el armario que no quiere que nadie vea... xD
Hola wuenas me da un error en la linea "int resul=miModelo.Suma(numero1,numero2,numero3,numero4,numero5);" de la clase Controlador y no se como solucionarlo.El error es:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Controlador.actionPerformed(Controlador.java:29)
Por otra parte me gustaria el poder reducir el codigo utilizando arrays en los JTextField el problema es que en el controlador no se como ponerlo.
El codigo esta en MVC
sI algo no se entiende perdonar pero es el primer post que escribo.
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Vista extends JFrame{
private JPanel panelPrincipal, panelSup, panelInf;
private JTextField cuadroTexto1,cuadroTexto2,cuadroTexto3,cuadroTexto4,cuadroTexto5;
private JTextField cuadroSuma;
private JButton botonValidar, botonDescubrir;
private Controlador miControlador;
Vista(){
initComponents();
}
private void initComponents() {
initControlador();
initPanels();
initJTextFields();
initJButton();
initOrganizarVentana();
}
private void initControlador() {
miControlador=new Controlador(this);
}
private void initPanels() {
panelPrincipal=new JPanel(new GridLayout(2,1));
panelSup=new JPanel(new GridLayout(1,6));
panelInf=new JPanel(new GridLayout(1,1));
panelPrincipal.add(panelSup);
panelPrincipal.add(panelInf);
}
private void initJTextFields() {
cuadroTexto1=new JTextField();
panelSup.add(cuadroTexto1);
cuadroTexto2=new JTextField();
panelSup.add(cuadroTexto2);
cuadroTexto3=new JTextField();
panelSup.add(cuadroTexto3);
cuadroTexto4=new JTextField();
panelSup.add(cuadroTexto4);
cuadroTexto5=new JTextField();
panelSup.add(cuadroTexto5);
cuadroSuma=new JTextField();
panelSup.add(cuadroSuma);
}
private void initJButton() {
botonValidar=new JButton("sumar");
panelInf.add(botonValidar);
botonValidar.addActionListener(miControlador);
botonDescubrir=new JButton("Descubrir");
panelInf.add(botonDescubrir);
}
private void initOrganizarVentana() {
this.add(panelPrincipal);
this.setSize(300, 200);
this.setTitle("numero secreto");
this.setVisible(true);
FlowLayout flo = new FlowLayout();
setLayout(flo);
}
public JButton getBotonValidar() {
return botonValidar;
}
public void setBotonValidar(JButton botonValidar) {
this.botonValidar = botonValidar;
}
public static void main(String args[]){
Vista miVentana=new Vista();
}
public JTextField getCuadroTexto1() {
return cuadroTexto1;
}
public void setCuadroTexto1(JTextField cuadroTexto1) {
this.cuadroTexto1 = cuadroTexto1;
}
public JTextField getCuadroTexto2() {
return cuadroTexto2;
}
public void setCuadroTexto2(JTextField cuadroTexto2) {
this.cuadroTexto2 = cuadroTexto2;
}
public JTextField getCuadroTexto3() {
return cuadroTexto3;
}
public void setCuadroTexto3(JTextField cuadroTexto3) {
this.cuadroTexto3 = cuadroTexto3;
}
public JTextField getCuadroTexto4() {
return cuadroTexto4;
}
public void setCuadroTexto4(JTextField cuadroTexto4) {
this.cuadroTexto4 = cuadroTexto4;
}
public JTextField getCuadroTexto5() {
return cuadroTexto5;
}
public void setCuadroTexto5(JTextField cuadroTexto5) {
this.cuadroTexto5 = cuadroTexto5;
}
public JTextField getCuadroSuma() {
return cuadroSuma;
}
public void setCuadroSuma(JTextField cuadroSuma) {
this.cuadroSuma = cuadroSuma;
}
public void setColorRed(){
cuadroTexto1.setBackground(new Color(255,0,0));
cuadroTexto2.setBackground(new Color(255,0,0));
cuadroTexto3.setBackground(new Color(255,0,0));
cuadroTexto4.setBackground(new Color(255,0,0));
cuadroTexto5.setBackground(new Color(255,0,0));
}
public void setColorVerde(){
cuadroTexto1.setBackground(new Color(0,255,0));
cuadroTexto2.setBackground(new Color(0,255,0));
cuadroTexto3.setBackground(new Color(0,255,0));
cuadroTexto4.setBackground(new Color(0,255,0));
cuadroTexto5.setBackground(new Color(0,255,0));
}
}
---------------------------------------------------------------------------------------
import java.util.Random;
public class Modelo {
private String num1,num2,num3,num4,num5;
public Modelo(String num1, String num2, String num3, String num4,
String num5) {
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
this.num4 = num4;
this.num5 = num5;
}
public int Suma(String num1,String num2,String num3,String num4,String num5){
int numero1=Integer.parseInt(num1);
int numero2=Integer.parseInt(num2);
int numero3=Integer.parseInt(num3);
int numero4=Integer.parseInt(num4);
int numero5=Integer.parseInt(num5);
int resultado=numero1+numero2+numero3+numero4+numero5;
return resultado;
}
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getNum2() {
return num2;
}
public void setNum2(String num2) {
this.num2 = num2;
}
public String getNum3() {
return num3;
}
public void setNum3(String num3) {
this.num3 = num3;
}
public String getNum4() {
return num4;
}
public void setNum4(String num4) {
this.num4 = num4;
}
public String getNum5() {
return num5;
}
public void setNum5(String num5) {
this.num5 = num5;
}
}
-------------------------------------------------------------------------------
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Controlador implements ActionListener{
private Vista miVentana;
private Modelo miModelo;
public Controlador(Vista miVentana){
this.miModelo=miModelo;
this.miVentana=miVentana;
}
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.getActionCommand().compareTo("sumar")==0){
String numero1=this.miVentana.getCuadroTexto1().getText();
String numero2=this.miVentana.getCuadroTexto2().getText();
String numero3=this.miVentana.getCuadroTexto3().getText();
String numero4=this.miVentana.getCuadroTexto4().getText();
String numero5=this.miVentana.getCuadroTexto5().getText();
int resul=miModelo.Suma(numero1,numero2,numero3,numero4,numero5);
miVentana.getCuadroSuma().setText(""+resul);
if(resul>10){
miVentana.setColorVerde();
}
if(resul<10){
miVentana.setColorRed();
}
}
}
}