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

tabla que se rellena en linux pero no en win ¿?

Estas en el tema de tabla que se rellena en linux pero no en win ¿? en el foro de Java en Foros del Web. A las buenas, Estoy haciendo una pequeña aplicación y tengo un problema con una tabla que se abre en un JFrame aparte, pues bien, esta ...
  #1 (permalink)  
Antiguo 01/10/2005, 02:00
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
tabla que se rellena en linux pero no en win ¿?

A las buenas,

Estoy haciendo una pequeña aplicación y tengo un problema con una tabla que se abre en un JFrame aparte, pues bien, esta tabla se ve en gris (sin encabezados ni datos) en XP pero se ve perfectamente en linux.

Sin embargo otra de las tablas que está en un panel en el JFrame principal sí se ve perfectamente en ambos SO

En XP tengo instalado es la versión 5 J2RE, el problema ocurre tanto con SP1 como con SP2
  #2 (permalink)  
Antiguo 01/10/2005, 11:39
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
muestranos el codigo de la tabla.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 01/10/2005, 12:40
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Gracias por responder,

Llega hasta el setDatos del modelo, pero no entra en el render (en xp)

Esta es la llamada al otro JFrame, en el que se muestra la tabla (aDatos es el arrayList que usará la tabla como modelo):

Código:
SeleccionarPersona ventanaSeleccionarPersona;
ventanaSeleccionarPersona = new SeleccionarPersona("Seleccione el Profesor");
ventanaSeleccionarPersona.setModeloDatos(aDatos);




Este es el código del modelo:


Código:
package modelosYrender;

import mypackage.Persona;

import java.util.ArrayList;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class ModeloSeleccionarPersona extends DefaultTableModel 
{

  private String[] aNombresColumnas = {"NOMBRE"    , "NIF"       , "TLF1"      , "TLF2"      , "MÓVIL"     , "FAX"       , "DIRECCIÓN",  "POBLACIÓN",  "PROVINCIA",  "MUNICIPIO",  "C.POSTAL" };
  private Class[]  aTiposCampos     = {String.class, String.class, String.class, String.class, String.class, String.class, String.class, String.class, String.class, String.class, String.class};

  private ArrayList miArrayListDatos = null;
  
  
  //----------------------------------------------------------------------------
  

  public ModeloSeleccionarPersona()
  {
  }
  
  
  //----------------------------------------------------------------------------


  public int getRowCount()
  {
    if (this.miArrayListDatos == null)
      return 0;
    else
      return this.miArrayListDatos.size();
  }
  
  
  //----------------------------------------------------------------------------


  public int getColumnCount()
  {
      return this.aNombresColumnas.length;
  }
  
  
  //----------------------------------------------------------------------------


  public String getColumnName(int columnIndex)
  {
    return this.aNombresColumnas[columnIndex];
  }
  
  
  //----------------------------------------------------------------------------


  public Class getColumnClass(int columnIndex)
  {
    return this.aTiposCampos[columnIndex];
  }
  
  
  //----------------------------------------------------------------------------


  public boolean isCellEditable(int rowIndex, int columnIndex)
  {
    return false;
  }
  
  
  //----------------------------------------------------------------------------


  public Object getValueAt(int rowIndex, int columnIndex)
  {
    
    if      (columnIndex == 0)
      //return ( (Persona) this.miArrayListDatos.get(rowIndex) ).getNombre();    
      return ((Persona) this.miArrayListDatos.get(rowIndex)).getNombre() + " " + ((Persona) this.miArrayListDatos.get(rowIndex)).getApellido1() + " " + ((Persona) this.miArrayListDatos.get(rowIndex)).getApellido2();
    else if (columnIndex == 1)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getNif();
    else if (columnIndex == 2)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getTelefono1();
    else if (columnIndex == 3)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getTelefono2();      
    else if (columnIndex == 4)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getMovil();      
    else if (columnIndex == 5)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getFax();   
    else if (columnIndex == 6)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getDireccion();        
    else if (columnIndex == 7)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getPoblacion();        
    else if (columnIndex == 8)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getProvincia();     
    else if (columnIndex == 9)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getMunicipio();     
    else if (columnIndex == 10)
      return ( (Persona) this.miArrayListDatos.get(rowIndex)).getCodigoPostal();        
    else 
      return null;
      
  }
  
  
  //----------------------------------------------------------------------------
  

  public void setValueAt(Object aValue, int rowIndex, int columnIndex)
  {
  }
  
  
  //----------------------------------------------------------------------------
  
  
  public void setDatos(ArrayList datos)
  {
  
    int contador;
    
    // Asigna al modelo el ArrayList con los datos
    this.miArrayListDatos = datos;

System.out.println("llego hasta asignar el arraylist al modelo, debería ir ahora al render");    
    
    // Fuerza a que se refresque la tabla
    this.fireTableDataChanged();
    
  }
  
  
  //----------------------------------------------------------------------------
  
  
  public Persona getDatos(int fila)
  {
      return ( (Persona) this.miArrayListDatos.get(fila) );    
  }
  
}

Y el del renderizador:


Código:
package modelosYrender;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;


public class RenderSeleccionarPersona implements TableCellRenderer 
{

  private JLabel etiqueta = new JLabel();
  
  
  //----------------------------------------------------------------------------


  public RenderSeleccionarPersona()
  {
      this.etiqueta.setOpaque(true);  
  }
  
  
  //----------------------------------------------------------------------------
  

  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
  {

    System.out.println("estoy en el renderer");

    
    if (isSelected)
    {

      this.etiqueta.setBackground(Color.CYAN);
    }
    else
    {

      this.etiqueta.setBackground(Color.ORANGE);
    }
  
    this.etiqueta.setText(value.toString());
    
    return etiqueta;  
    
  }
  
 
}
  #4 (permalink)  
Antiguo 01/10/2005, 12:45
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Y claro, al setDatos del JFrame SeleccionarPersona le paso el ArrayList, que a su vez lo pasa al setDatos del modelo.
  #5 (permalink)  
Antiguo 01/10/2005, 15:35
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
La verdad no veo error de codigo, solo que hay algunas cosas que no logro encontrar, por ejemplo de de String.class lo trate de buscar en API y no dice nada al respecto.

Tampoco logro ver la parte del codigo conde se supone que asignes el Array a la tabla...

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #6 (permalink)  
Antiguo 01/10/2005, 15:47
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Lo del String.class es para indicar que dicha celda contendrá un objeto (String), bien puediera ser Integer.class, Date.class...

El método setDatos del modelo es el que carga el ArrayList con los datos (en él hago un fireTableDataChanged() que refresca la tabla completa), que a su vez le pasé al JFrame con un método del mismo nombre.

No creo que sea un error de programación ya que de ser así no se mostraría la tabla bajo Linux.

Salu2
  #7 (permalink)  
Antiguo 03/10/2005, 14:16
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
bueno bueno... pues gracias a un compañero di con la solución...

el problema era que hacía un setvisible(true) antes de un setLocation y setSize... que no sé porqué lo puse en este orden por cierto.

Gracias goncafa.
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 13:17.