No ha encontrado la respuesta aquí? Regístrate, preguntar y obtener una respuesta adecuada en cuestión de minutos!
  • Username:

Para poder verificar esta petición, por favor escribe en el campo de abajo lo siguiente: forodejava

Password:
Confirm Password:
Your Email:
Confirm Email:
Resultados 1 al 6 de 6
  1. #1
    Fecha de ingreso
    07 ene, 12
    Mensajes
    12
    Post Thanks / Like
    Poder de reputación
    0

    Predeterminado Acceder a un método o variable de un formulario desde otra clase

    Buenas tardes a todos

    Básicamente lo que quiero es que el color del texto de las celdas de un jTable dependan de una determinada condición, para lo cual, según me he informado, necesito hacer referencia a Renderer creando una nueva clase. Haciendo eso e introduciendo condiciones dentro de esa nueva clase, consigo cambiar el color. El problema me viene cuando el dato del color se encuentra en una base de datos mysql, ya que consigo que funcione pero la aplicación se ralentiza muchísimo (al tener que estar consultando la base de datos continuamente). El caso es que ese dato del color lo tengo disponible en el formulario principal en el que se encuentra la tabla, pero no sé como "pasárselo" a esa otra clase que contiene el render para que cada vez que se renderice cada celda, lo haga con el color que tiene en ese momento dicha variable. Lógicamente, el resto de celdas deben tener el color que se les dio en su momento.

    La solución completa para el hilo: aquí.



    No sé si me he explicado bien, pero bueno... muchísimas gracias de antemano

  2. #2
    Fecha de ingreso
    09 oct, 09
    Ubicación
    Córdoba - Argentina
    Mensajes
    222
    Post Thanks / Like
    Poder de reputación
    1428

    Predeterminado

    Ahi me parece que estas teniendo un error de diseño de la aplicacion. Deberias tener una clase ColoresDBTable de tipo Singleton que tome una vez los valores de los colores y los almacene en una tabla hash (hashmap por ejemplo), y que ColoresDBTable tengo algun metodo que te permita extraer, mediante una key, un valor, que va a ser el color. Por ejemplo: ColoresDBTable.getInstance().getColor("CLIENTE");
    Esa clase deberia cargar sus valores una vez al arranque de la aplicacion y nunca mas... O como mucho le pones un Timer y haces que cada 10 minutos refresque esos datos desde la DB.

    Para crear un comportamiento de pintado de las celdas de la JTable (por ej: que se pinten de ROJO los Clientes que tengan Saldo menor a cero) tenes que crear un CellRender y aplicarselo a dicha JTable.

    Saludos!
    Última edición por Diego912; 26/01/2012 a las 13:41

  3. #3
    Fecha de ingreso
    07 ene, 12
    Mensajes
    12
    Post Thanks / Like
    Poder de reputación
    0

    Predeterminado

    Hola Diego912,

    En primer lugar, muchas gracias por contestar... sinceramente, es la primera vez que "oigo" hablar de clases tipo Singleton. He estado investigando un poco y he hecho lo siguiente:
    He creado una clase llamada PruebaSingleton de la siguiente manera:


    public class PruebaSingleton {
    private static PruebaSingleton INSTANCE = null;

    public PruebaSingleton() {}

    String sSQL;
    ConexionMySQL mysql;
    Connection cn;
    public HashMap contenedor;

    static public int intColor;

    //static public int prueba=8;

    public int id_EquipoActual = 0;
    public String nombre_EquipoActual = "";
    public static int color_EquipoActual = 0;
    public int puntos_EquipoActual=0;

    public void RecogerDatosColor(){

    int intColor=0;

    mysql = new ConexionMySQL();
    cn = mysql.Conectar();
    sSQL = "SELECT Id_Celda, Color FROM DatosMaterialCeldas";
    contenedor = new HashMap();
    try {
    Statement st = cn.createStatement();
    ResultSet rs = st.executeQuery(sSQL);

    while(rs.next())
    {
    contenedor.put(rs.getInt("Id_Celda"), rs.getString("Color"));
    }

    rs.close();
    cn.close();


    //JOptionPane.showMessageDialog(null, contenedor.size());

    } catch (SQLException ex) {
    JOptionPane.showMessageDialog(null, ex);
    }

    }


    public void Set_DatosActuales(int id_equipo, String nombre, int intColor, int puntos) {

    this.id_EquipoActual=id_equipo;
    this.nombre_EquipoActual=nombre;
    this.color_EquipoActual=intColor;
    this.puntos_EquipoActual=puntos;

    }

    public int RecogerDatoColor(int fila, int columna) {

    try {

    int color=-1;
    JOptionPane.showMessageDialog(null, this.contenedor.size());

    int idcelda=(columna+1)*28+fila+1;

    Iterator it = contenedor.entrySet().iterator();

    while (it.hasNext()) {
    Map.Entry e = (Map.Entry)it.next();
    //System.out.println(e.getKey() + " " + e.getValue());
    if (idcelda==((Integer)e.getKey()).intValue()) {
    color=((Integer)e.getValue()).intValue();}
    }

    return color;

    } catch (Exception e) {
    JOptionPane.showMessageDialog(null, e);
    return -1;


    }

    }


    private synchronized static void createInstance() {
    if (INSTANCE == null) {
    INSTANCE = new PruebaSingleton();
    }
    }

    public static PruebaSingleton getInstance() {
    if (INSTANCE == null) createInstance();
    return INSTANCE;
    }
    }

    Justo después del InitComponent() del formulario principal llamo al método RecogerDatosColor, de manera que "contenedor", de tipo HashMap, se llena con la información procedente de la base de datos. Posteriormente. Sin embargo, al llamar luego al método RecogerDatoColor para que me devuelva el color correspondiente a la celda seleccionada en el JTable, lo que me devuelve es un error de tipo NullPointerException en la línea en la que mediante en un JOptionPane pregunto por el tamaño de "contenedor"... es como si se hubiera vaciado

    Como ves, voy dando palos de ciego... y eso que todavía no me he metido con lo del render

    ...si me pudieras seguir echando una mano te lo agradecería

  4. #4
    Fecha de ingreso
    29 sep, 11
    Ubicación
    España
    Mensajes
    511
    Post Thanks / Like
    Poder de reputación
    819

    Predeterminado

    Esto te va a ayudar a saber qué está pasando en tu aplicación en cada momento!

    Suerte!

  5. #5
    Fecha de ingreso
    09 oct, 09
    Ubicación
    Córdoba - Argentina
    Mensajes
    222
    Post Thanks / Like
    Poder de reputación
    1428

    Predeterminado

    Es medio complicado encontrar un NullPointerException solo mirando el código. Para encontrarlo te recomiendo que uses el debuger del IDE que estes usando (sea Netbeans, Eclipse, etc) y hagas un seguimiento instruccion por instruccion del método RecogerDatoColor() ya que seguramente se te estan yendo afuera los indices, pero verlo asi a simple vista es dificil...

    Singleton es un patron de diseño, el mas simple... Te recomiendo que leas sobre los patrones de diseño mas usados en Java, como Factory, Singleton, Facade, etc... Te ayudan muchisimo a la hora de pensar la lógica de tu programa.
    Por otro lado el patron Singleton es con el constructor privado, no publico, ya que la idea es que al iniciarse la aplicacion la clase PruebaSingleton se cree automaticamente y no permita que se cree otra instancia de la misma clase. O sea, una sola instancia en todo el programa. Asi tendria que ser la clase PruebaSingleton:

    Código PHP:
    public class PruebaSingleton {

        private static final 
    PruebaSingleton INSTANCE = new PruebaSingleton(); // Como veras aca se ejecuta por unica vez el constructor y al ser privado no tienes como volverlo a ejecutar para crear una nueva instancia de esta clase, por lo tanto en todo tu programa solo existirá una y solo una instancia de PruebaSingleton.
        
        
    private PruebaSingleton() {
            
    // Aca todo el codigo que necesites al iniciar la clase.
        
    }
        
        
    /** Aca todos los métodos públicos y privados de la clase.... */
        
        /* Este es el método que te devuelve la única instancia que existe de PruebaSingleton, en cualquier parte del programa, y a través de la cual accederás a los demás métodos de tu clase. */
        
    public static PruebaSingleton getInstance() {
            return 
    INSTANCE;
        }

    En cualquier otra parte de tu programa vas a hacer:

    Código PHP:
    PruebaSingleton.getInstance().RecogerDatoColor(1,10); 
    Sin tener que crear una nueva instancia de PruebaSingleton... simplemente llamando a la unica instancia existente...
    Última edición por Diego912; 27/01/2012 a las 14:44

  6. #6
    Fecha de ingreso
    07 ene, 12
    Mensajes
    12
    Post Thanks / Like
    Poder de reputación
    0

    Predeterminado

    No ha encontrado la
    respuesta aquí?
    Regístrate, preguntar y
    obtener una respuesta
    adecuada en cuestión de minutos!


    Un registro de minutos: clic

    Sin publicidad para los miembros!
    Muchísimas gracias de nuevo... estudiaré un poco lo que me dices y comento...

    Saludos!

Temas similares

  1. Problemas acceder un metodo desde otra clase
    Por Memii en el foro Java Básico
    Respuestas: 1
    Último mensaje: 04/12/2011, 02:20
  2. Acceder a un componente de una clase desde otra clase
    Por creative86 en el foro Java Básico
    Respuestas: 5
    Último mensaje: 16/01/2011, 20:34
  3. problema al llamar un metodo desde otra clase
    Por java_doc en el foro Java Básico
    Respuestas: 2
    Último mensaje: 09/12/2010, 10:49
  4. Respuestas: 0
    Último mensaje: 07/11/2010, 16:52
  5. llamar clase desde otra clase en el mismo proyecto
    Por vitocourt en el foro Java Básico
    Respuestas: 1
    Último mensaje: 17/02/2010, 18:03

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •