Java, estoy realmente jodido
#25
Cita
(14-04-2012 22:31)Led Zeppelin link escribió:Hola.

Sí, es el programa que nos fotocopió de ejemplo, con las mismas explicaciones, pero por más veces que lo leí no logré comprender esas lineas, no sé si fue porque ya estaba algo quemado y agobiado, o porque voy a necesitar que el profesor se ponga un buen rato conmigo a explicarmelo paso a paso.

Gracias por la ayuda.

Un saludo.
Pero lo has entendido con la explicación del enlace o necesitas que te aclare algo.
#26
Cita
Hola.

(14-04-2012 22:34)Indyana link escribió:Pero lo has entendido con la explicación del enlace o necesitas que te aclare algo.

La fotocopia es todo el programa y la explicación que le precede, pero no logro entenderla por completo, solo las lineas de código que menciono, y de algunas no estoy del todo seguro.

Un saludo.
#27
Cita
(14-04-2012 22:44)Led Zeppelin link escribió:Hola.

La fotocopia es todo el programa y la explicación que le precede, pero no logro entenderla por completo, solo las lineas de código que menciono, y de algunas no estoy del todo seguro.

Un saludo.
Mañana te lo explico mejor, entonces.
#28
Cita
Hola.

(14-04-2012 22:50)Indyana link escribió:Mañana te lo explico mejor, entonces.

Ok, gracias.

Por cierto, ¿has trabajado picando código alguna vez?, ¿qué suele necesitarse para entrar de programador jr?, porque es lo que más necesitaría ahora, encontrar un trabajo de esto para coger más experiencia e ir ganando dinero.

Un saludo.
#29
Cita
Lo que se hace en tu programa es mostrar el funcionamiento de un patrón de diseño llamado Modelo Vista Controlador. Te pego su descripción:

MVC es una descomposición orientada a objeto del diseño de interfaces de usuario. Los componentes se descomponen en tres partes: un modelo, una vista, y un controlador.

┬á ┬á El modelo es el responsable de conservar todos los aspectos del estado del componente. Esto incluye, por ejemplo, aquellos valores como el estado pulsado/no pulsado de un botón, los datos de un carácter de un componente de texto y como esta estructurado, etc. Un modelo puede ser responsable de comunicación indirecta con la vista y el controlador. Indirecta significa que el modelo no conoce su vista y controlador no mantiene referencias hacia ellos. En su lugar el modelo enviará notificaciones que conocemos como eventos.
┬á ┬á La vista determina la representación visual del modelo del componente. Esto es el aspecto del componente. La vista es responsable de mantener actualizada la representación en pantalla y debe hacerlo recibiendo mensajes indirectos del modelo o mensajes directos del controlador.
┬á ┬á El controlador es responsable de determinar si el componente debería reaccionar a algún evento proveniente de dispositivos de entrada, tales como el teclado o el ratón. El controlador puede recibir mensajes directos desde la vista, e indirectos desde el modelo.





La clase JTree

La clase JTree es la punta del iceberg que constituye la implementación de árboles en Swing. Se trata de un componente que puede ser incorporado a cualquier contenedor Swing, siendo lo más habitual añadirlo a un contenedor JScrollPane para proporcionar desplazamiento vertical al árbol cuando se expandan sus nodos. La clase JTree es la que tiene asignados los roles de Vista y Controlador del patrón MVC utilizado por Swing.

Un objeto JTree necesita de un objeto de tipo TreeModel a partir del cual poder obtener información. Este objeto TreeModel se puede crear explícita o implícitamente a partir de otra fuentes como vectores o tablas hash. TreeModel es pues una interfaz que proporciona los datos que se van a prsentar a través de JTree, constituyendo la parte del Modelo de patrón MVC. Esta interfaz describe métodos para consultar aspectos de la topología del árbol, incluyendo el nodo raíz. La clase receptora de eventos TreeModelListener se utiliza cuando es importante conocer cambios en la estructura del TreeModel. Swing proporciona una implementación por defecto, la interfaz TreeModel, la clase DefaultTreeModel.

La clase TreeNode es quizás la más importante dentro de la generación de árboles Swing. Proporciona métodos para nombrar a los hijos, determinar cuándo se pueden añadir hijos a un nodo padre, determinar cuándo un nodo es una hoja y métodos para localizar el nodo padre de unodo cuaquiera. Resulta también importante la interfaz MutableTreeNode que extiende la interfaz TreeNode, incorporándole métodos para insertar y eliminar nodos hijos, cambiar el padre de un nodo y almacenar un objeto cualquiera en un nodo. Sin embargo, esta interfaz no proporciona ningún método para recuperar un objeto almacenado en un nodo, pr lo que el desarrollador no está obligado a permitir que los objetos allmacenados en un árbol puedan ser recuperados. Afortunadamente, la implementación de la interfaz, la clase DefaultMutableTreeNode, sí proporciona un método para esta acción.

La clase DefaultMutableTreeNode dispone de un constructor por defecto que crea un nodo, sin ningún objeto almacenado, al cual se pueden añadir hijos. También dispone de otros constructores que permiten incorporar objetos al nodo e indicar si ese nodo puede o no tener hijos.

En resumen, la clase JTree puede construirse de varias formas. La primera de ellas consiste en utilizar el constrctor por defecto que creará un objeto TreeModel automáticamente. Otra forma es mediante un array de objetos de tipo Object, Vector o Hash, en cuyo caso el modelo se creará en base a los datos que proporcionen estos objetos. Y la tercera forma de construir una clase JTree es mediante un objeto TreeModel o TreeNode propios, siendo ésta la más flexible de las tres y la que se utiliza en el siguiente ejemplo.

En el ejemplo java1414.java, se utilizan instancias de la clase DefaultMutableTreeNode para crear un modelo para JTree y establecer las relaciones jerárquicas entre los componentes del árbol. El código que se muestra reproduce la creación de estos objetos.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

// Esta clase coge un array de Strings, haciendo que el primer elemento
// del array sea un nodo y el resto sean ramas de ese nodo
// Con ello se consiguen las ramas del árbol general cuando se pulsa
// el botón de test
class Rama {
    DefaultMutableTreeNode r;
┬á ┬á public Rama( String datos[] ) {//se introducen los datos en el árbol y se muestran por pantalla
        r = new DefaultMutableTreeNode( datos[0] );
        System.out.print ( "Agregando " + datos[0] + ": " );
        for ( int i=1; i < datos.length; i++ ) {
            r.add( new DefaultMutableTreeNode( datos[i] ) );
            System.out.print ( " " + datos[i] );
        }
        System.out.print ( "\n" );
    }

    public DefaultMutableTreeNode node() {
        return( r );
    }
}


public class java1414 extends JPanel {
    String datos[][] = {
        { "Colores","Rojo","Verde","Azul"},
        { "Sabores","Salado","Dulce","Amargo"},
        { "Longitud","Corta","Media","Larga"},
        { "Intensidad","Alta","Media","Baja"},
        { "Temperatura","Alta","Media","Baja"},
        { "Volumen","Alto","Medio","Bajo"},
    };
    static int i=0;
    DefaultMutableTreeNode raiz,rama,seleccion; //declaramos los elementos
    JTree arbol;//vista y controlador
    DefaultTreeModel modelo; //modelo

┬á ┬á JButton botonPrueba = new JButton( "Púlsame" );

    public java1414() {
        setLayout( new BorderLayout() );
┬á ┬á ┬á ┬á raiz = new DefaultMutableTreeNode( "raíz" ); //se inicializa raíz a "raíz"
        arbol = new JTree( raiz ); //se inicializa el 'arbol
┬á ┬á ┬á ┬á // Se añade el árbol y se hace sobre un ScrollPane, para
┬á ┬á ┬á ┬á // que se controle automáticamente la longitud del árbol
┬á ┬á ┬á ┬á // cuando está desplegado, de forma que aparecerá una
        // barra de desplazamiento para poder visualizarlo en su
        // totalidad
        add( new JScrollPane( arbol ),BorderLayout.CENTER );
┬á ┬á ┬á ┬á // Se obtiene el modelo del árbol
        modelo =(DefaultTreeModel)arbol.getModel();
┬á ┬á ┬á ┬á // Y se añade el botón que va a ir incorporando ramas
        // cada vez que se pulse
        botonPrueba.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent evt ) {
                if( i < datos.length ) {
                    rama = new Rama( datos[i++] ).node();
┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á // Control de la útlima selección realizada
┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á seleccion = (DefaultMutableTreeNode) arbol.getLastSelectedPathComponent(); //se inicializa selección al último camino elegido, he juntado las líneas
                    if( seleccion == null )
                        seleccion = raiz;
┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á // El modelo creará el evento adecuado, y en respuesta
┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á ┬á // a él, el árbol se actualizará automáticamente
                    modelo.insertNodeInto( rama,seleccion,0 );
                    if ( i == datos.length )
                        botonPrueba.setEnabled( false );
                }
            }
        } );
#30
Cita
Hola.

Pues entonces el problma lo tengo con el diseño MVC, ya que pocas veces he visto algo así, y es lo que me está liando.

He estado viendo un poco el programa con el profesor y entiendo que DefaultMutableTreeNode es donde se define la jerarquia del arbol y se insertan los nodos/estructura, DefaultTreeModel es para establecer la comunicación entre el arbol y los nodos y JTree es el propio arbol.

No sé si será lo correcto, pero ya me ha dicho el profesor que para el próximo dia lo vamos a ver más detenidamente, dibujando en un papel lo que hace cada cosa como si fuera tonto (que estoy empezando a creerlo), ya que es lo que necesito.

Muchas gracias Indyana, si no respondí ayer es porque aún leyendolo no me enteré completamente y no quería ponerte en la situación frustrante de mi profesor xd.

Un saludo.
#31
Cita
(16-04-2012 18:44)Led Zeppelin link escribió:Hola.

Pues entonces el problma lo tengo con el diseño MVC, ya que pocas veces he visto algo así, y es lo que me está liando.
Pues nada, míralo con calma que es un patrón muy usado.
(16-04-2012 18:44)Led Zeppelin link escribió:He estado viendo un poco el programa con el profesor y entiendo que DefaultMutableTreeNode es donde se define la jerarquia del arbol y se insertan los nodos/estructura, DefaultTreeModel es para establecer la comunicación entre el arbol y los nodos y JTree es el propio arbol.

No sé si será lo correcto, pero ya me ha dicho el profesor que para el próximo dia lo vamos a ver más detenidamente, dibujando en un papel lo que hace cada cosa como si fuera tonto (que estoy empezando a creerlo), ya que es lo que necesito.

Muchas gracias Indyana, si no respondí ayer es porque aún leyendolo no me enteré completamente y no quería ponerte en la situación frustrante de mi profesor xd.

Un saludo.
Nada hombre, si tienes más dudas, dilas e intentaré ayudarte.
#32
Cita
Hola.

Hoy he perdido mi carpeta con todos mis apuntes y programas de Java. Al abrir la mochila en clase creía que me la había dejado en casa, pero al volver he visto que no está por ningún sitio ...

En fin, voy para  roto2:

Un saludo.
#33
Cita
Dónde tendrás la cabeza...┬á :-* :burla:
#34
Cita
Hola.

(18-04-2012 20:52)refixed link escribió:Dónde tendrás la cabeza...┬á :-* :burla:

No lo sé, llevo una racha de desastre que tela, y aunque intente tomarmelo con humor en esa carpeta lo tenía todo ... sin ella solo tengo un libro de Java.

Un saludo.
#35
Cita
(18-04-2012 21:21)Led Zeppelin link escribió:Hola.

No lo sé, llevo una racha de desastre que tela, y aunque intente tomarmelo con humor en esa carpeta lo tenía todo ... sin ella solo tengo un libro de Java.

Un saludo.
Mira el lado bueno, al menos, tienes un libro de Java.


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)