MVC en Eclipse - JAVA

Iniciado por the_jocker, 30 Julio 2013, 03:13 AM

0 Miembros y 1 Visitante están viendo este tema.

the_jocker

Buenas, Hace un mes que empecé con java, más bien, me lo enseñaron en la facultad, ahí tuve que aprender con el ide netbeans, me resulto muy sencillo trabajar con este ide, más en la parte de GUI con swing, pero ahora que ya termine la materia, encaro un proyecto personal, y elegí como ide el eclipse.
Ahora, lo que hacia en netbeans para hacer una accion, con un ActionListener, el eclipse no lo reconoce como tal.

Yo en mi vista, tengo un GUI, entonces ahí creo un metodo que ingresa el controlador, entonces en el controlador, recibe esa vista, y en su constructor llama al método que que estaba en la vista, ahí en controlador toma el control, entonces pregunta por la accion con la sentencia getActionCommnad(),
entonces ahí hace una acción.

Si no me explico bien, es por mi poca experiencia, no me puedo explicar bien todavia. Pero puedo poner un ejemplo:

Esto es la pantalla principal

Código (java) [Seleccionar]


package vista;

import controlador.Controlador;

public class PantallaPrincipal extends javax.swing.JFrame {

    public static final String MENU_SOCIO = "MENU SOCIO";
    public static final String MENU_PAGO = "MENU PAGO";

    public PantallaPrincipal() {
        initComponents();
        SOCIO.setActionCommand(MENU_SOCIO);
        PAGO.setActionCommand(MENU_PAGO);
    } 

public void setControlador(Controlador controlador){
        SOCIO.addActionListener(controlador);
        PAGO.addActionListener(controlador);
    }

    public void Ejecutar(){
        this.setVisible(true);
    }


Esto está echo en netbeans, pero en eclipse no lo puedo hacer, asi de la misma manera.

Ya que no puedo llamar a el boton para hacer lo que hace el metodo setControlador().

Alien-Z

#1
Podrías por favor expresar de otro modo cuál es tu pregunta, ¿no puedes usar el método "setControlador()" o qué es lo que le ocurre exactamente al código?.

A parte de eso hay un pequeño error en el constructor: Cuando creas una clase que hereda de otra, como es este caso, en los constructores es obligatorio llamar al menos al constructor por defecto de la clase padre, y esta debe ser siempre la primera instrucción:

Código (java) [Seleccionar]
   public PantallaPrincipal() {
      super(); //super(...); llama al constructor de la clase padre pasándole esos argumentos, puede ser el constructor por defecto o cualquier otro
      initComponents();
      SOCIO.setActionCommand(MENU_SOCIO);
      PAGO.setActionCommand(MENU_PAGO);
  }

the_jocker

La pregunta es, ese codigo que vos dices que tiene un error, y que le falta más codigo de los botones y cajas de texto, funciona, en el metodo setControlador(), puedo llamar a ese boton, y hacer un setActionCommand(), en cambio en eclipse, no puedo llamar al boton, entonces el metodo no lo puedo crear, es eso solo.

the_jocker

Bueno, me decidí por netbeans, al parecer no se entiende lo que pregunté, pero bueno, la verdad es que lo que quería hacer es que de la manera que trabajo en netbeans, lo pueda hacer en eclipse, vi algunos detalles de como se crean interfaces en eclipse con el plugin WindowsBuilder, entonces talvez, lo pueda usar en otro momento, gracias por su ayuda.
Si alguien con más conocimientos de los dos ides, me puede ayudar dejo el proyecto en netbeans, de la manera que quiero trabajar, y me dice porque no puedo en eclipse me avisa, gracias.
https://mega.co.nz/#!2ER1Vb7I!YoybQ1vETA3b6Tcgo2B10B7K8i8avgMbgovvFejMDJE

Alien-Z

#4
Pues a mi me funciona sin problemas en Eclipse, da avisos en algunas líneas en las que se puede depurar el código y eliminar instrucciones innecesarias, pero se ejecuta perfectamente sin haber modificado nada:



Me parece que ya comprendo cuál es el problema, ¿no consigues trasladar el programa desde netbeans a eclipse?, si es eso abre eclipse y crea un nuevo proyecto (no importes el que tienes), vuelve a crear los paquetes y las clases y copia el código desde netbeands a las nuevas clases de eclipse (copiar y pegar). En teoría importando el proyecto debería funcionar pero si hay algún error de compatibilidad de este modo tiene que ejecutarse.

Un saludo.

the_jocker

Muchas gracias Alien-Z, es cierto, funciona con advertencias, pero funciona, hay alguna manera de simular esto en eclipse, sin necesidad de tener que hacerlo en netbeans.Que es lo que modificarías vos?.
Un saludo.

Alien-Z

#6
Eclipse y Netbeans son IDE's y realmente no tienen nada que ver con el código Java en sí, que uses uno u otro no afecta al programa, es decir, lo que escribas en una IDE te debe funcionar en las demás. De hecho ni si quiera pueden compilar, cuando tú le das al botón "compilar", lo que hacen es llamar a la aplicación creada por Sun Microsystems (propietaria de java) que se encuentra en la carpeta ...\jdk\bin\javac y es la que realmente crea el fichero ".class" con el código compilado.

En definitva, no importa qué plataforma o IDE utilices para desarrollar tu aplicación porque debe funcionarte en las demás.

Sobre las que mencionas, no puedo darte una opinión clara acerca de cuál de las dos IDE's es más potente porque pocas veces he tocado netbeans; en la universidad nos incitaban a utilizar eclipse (supongo que por algo será) y es con el que más he trabajado. Vas a encontrar gente que se incline hacia una u otra plataforma, pero lo que yo te recomiendo es que vayas alternando hasta que veas con cuál te sientes más cómodo.

En tu proyecto no veo ningún error importante, solo un pequeño fallo conceptual:

ArrayList<T> es un tipo genérico que hereda de otro tipo genérico List<T> que a su vez hereda de otro Collection<T>, éste último es la raíz de todas las colecciones predefinidas de java (listas, arrays dinámicos, árboles, etc.). Si te fijas todas utilizan un tipo genérico pero es casi obligatorio parametrizarla a un tipo declarado. Por tanto, cuando creas un array dinámico:

Código (java) [Seleccionar]
private ArrayList<T> lista = new ArrayList<T>();

Hay que sustituir el tipo genérico T por uno ya declarado e implementado, por ejemplo:

Código (java) [Seleccionar]
private ArrayList<Cuenta> lista2= new ArrayList<Cuenta>(); //Un array dinámico de cuentas

También puedes utilizar el tipo comodín ? para decirle a la lista que le vas a asignar tanto listas cuyos objetos son de tipo "Cuenta" como los subtipos de "Cuenta":

Código (java) [Seleccionar]
private ArrayList<? extends Cuenta> lista = new ArrayList<CuentaEstructurada>();

Lo que tú haces en el programa es trabajar con tipos "Object", por tanto debes organizarlo del siguiente modo:

Código (java) [Seleccionar]
private ArrayList<Object> lista = new ArrayList<Object>();

Cuando quieras utilizar un método de uno de los objetos que hay en la lista debes aplicar casting:

Código (java) [Seleccionar]
Cuenta cuenta = (Cuenta) lista.get(5); //Obtienes el quinto elemento de la lista y se lo asignas a la variable "cuenta"
cuenta.metodo(); //Ahora podrás utilizar sus funciones


Espero que te sirva, si tienes alguna duda o no comprendes algo comenta.

Un saludo.