Foros del Web » Programación para mayores de 30 ;) » Java »

Clase Interfaz

Estas en el tema de Clase Interfaz en el foro de Java en Foros del Web. No hace mucho retome de nuevo la programación en el parte de Java, y estructuré un sistema algo sencillo pero de gran uso (personalmente) en ...
  #1 (permalink)  
Antiguo 26/05/2009, 13:26
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Mensaje Clase Interfaz

No hace mucho retome de nuevo la programación en el parte de Java, y estructuré un sistema algo sencillo pero de gran uso (personalmente) en la parte de componentes(clase Component) y contenedores(clase Container) en dicho lenguaje.

El contenido gira en torno a la clase GridBagLayout(posicionador) y GridBagConstraints, efectivamente en la parte de diseño desde código son el complemento más apto para el diseño de interfaces "decentes" en Java, personalmente es un "reto"...

Dicho posicionador genera una "matriz" en parte de diseño para la posición de los diferentes componentes, asi entonces tomando como ejemplo un componente en el inicio(parte superior izquierda) de la ventana seria de posición en la "matriz" [0][0].

Complemento:

GridBagConstraints

Clase (paquete generado en netbeans 6.7 y compreso):

Interfaz

Clase (documentos de texto):

Interfaz

Aceptaré algunos comentarios constructivos, y mejoras...

Saludos.
  #2 (permalink)  
Antiguo 26/05/2009, 15:18
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: Clase Interfaz

Buenas:

He de decir que yo personalmente tengo un estilo totalmente distinto de programar intefaces al tuyo, pero bueno, aún así te lo voy a sugerir a ver que te parece.
  • Por un lado, la parte de general hay programadores que la meten en la misma clase del JFrame, a mi personalmente me gusta separarla como tu has hecho.
  • En segundo lugar, creo que te estas complicando mucho al crear Visual, ya que realmente lo que haces es incluir dos atributos y hacer una función que introduce los componentes en los atributos. Yo cambiaría esto, ya que no te aporta nada salvo complejidad (si te das cuenta has tenido que hacer un par de switch para algo que si lo haces directo no tienes ningún problema, es decir, pasas el codigo de lo que deseas y se lo asisgnas directamente, sin saber que es cada cosa pues no necesitas modificarlo). La segunda cosa que aporta es claridad en Interfaz, que está bien, pero se puede hacer de otra manera.
  • Por último, la clase Interfaz es muy escueta y está muy bien, realmente me gusta su simplicidad, pero no ha costa de añadir complejidad por otro lado. Si lo que quieres es una función para añadir para tener simplicidad en la introducción de contenido, añadela en la misma clase. Otra opción es añadir toda la información en una linea
    contenedor.add(elemento, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
    contenedor.add(elemento new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady));

    Aunque he de decir que puede quedar un poco ilegible, y si alguien tiene que volver a tocar, lo mismo se confunde.

Bueno, eso es todo, espero que te sirva de algo. Saludos.

PD: Una última cosa, yo pondría el añadir componentes de General dentro del constructor de la Interfaz, pues es algo que siempre has de hacer y no tiene sentido independizarlo.
  #3 (permalink)  
Antiguo 26/05/2009, 16:22
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Mensaje Respuesta: Clase Interfaz

Primero que todo, gracias por tu comentario y un saludo, por otro lado...

Cita:
contenedor.add(elemento, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
contenedor.add(elemento new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady));
Conozco tambien ese método de agregar components, pero si hay algo que trate de hacer en la clase Visual fue simplemente crear una "referencia" de GridBagConstraints general... tienes razón en lo que dices con ello de complejidad en la parte de Visual es algo tal vez no 100% necesario, pero que le brinda como dices "simplicidad" a mi clase Interfaz, el punto de manejar cada vez un objeto como segundo argumento del método add() de la clase Container era algo que queria evitar al igual que especificar cada vez el Contenedor:

Ejemplo:


Container.add(Component primero);
Container.add(Component segundo);

De la misma forma para n componentes agregados a JPanel, queria generalizar con el método objetoContenedor() el siguiente contenedor a utilizar y evitar hacer el llamado del contenedor como tal (realmente trato de evitar la redundancia en mi código, y ello me ha dado excelentes resultados, por ello siempre "generalizo"), por ultimo si tienes razón lo de lo agregarComponentes() y es algo que corregiré, (y algunos puntos de más que me has regalado)...dicho método lo habia pensando con el fin de manejar diversos contenidos y aprovechando un poco el usar una clase General para ello, me generaba más lógica de su uso en General, pero he entendido tu punto.

Por ahora un gracias, y un saludo de nuevo.

Un gusto Squar.
  #4 (permalink)  
Antiguo 28/05/2009, 05:11
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: Clase Interfaz

Buenas:

Se me olvido comentarte una pequeña cosa si eres de l@s que le gusta modificar y remodificar el código como a mi hasta que te parece visualmente aceptable. En vez de usar estáticamente las posiciones de fila y columna, te aconsejo que lo pongas en variables y vayas incrementándolas. Así, cuando vayas a mover los elementos, no tendrás que cambiar cada una de las coordenadas (que si tienes muchas, puede llegar a ser un pequeño tostón).

Saludos.

PD: Me alegra haberte ayudado aunque solo sea un poco :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:47.