elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Java / Problema con columnas grupales en un JTable en: 17 Mayo 2010, 05:28 am
Hola buenas!!!

El problema que tengo es: tengo una ventana donde muestro varias tablas, esta tablas se encuentran separadas o distribuidas en distintos tabs de un JTabbedPane, el asunto es que unicamente la tabla que se en el 1° tab me lo muestra como debe ser (si me agrupa las columnas), pero en el resto de tabs no lo hace, pero eso no es todo, al mostrarme la tabla aparece un error (el error es bastante extraño para mi, por lo siguiente: me tira NullPointerException , depure el código para ver el origen de la excepción y resulta que en determinado momento en el método: "getTableCellRendererComponent" de la clase "ColumnGroup" pasa un null en el parámetro del JTable, digamos que para "solucionarlo" metí un try/catch al hacer esto la aplicación no se me cae y me muestra la tabla aparentemente sin problemas, pero lógicamente si los tiene uno es que si intentas reajustar el tamaño de una columna o un grupo de columnas este no lo hace bien, unicamente reajusta el tamaño de la cabecera).

Lo que lo hace más extraño para mi es que, he usado digamos los mismos pasos crear tablas con columnas grupales en otras partes de la aplicación y en esta si me funciona bien, sin ningún tipo de problema incluso no necesite alterar de ninguna manera la clase "ColumnGroup".

Otra cosa es que pude comprobar  que en el modelo de la columna de la tabla si se agregan las columnas grupales...

Pongo un poco del código para mostrar los pasos que estoy usando para "armar la tabla":

Código
  1. private void initTabla(byte tabla){
  2. ColumnGroup total= new ColumnGroup("Cantidad Total");
  3. ColumnGroup setimo= new ColumnGroup("7");
  4. ColumnGroup octavo= new ColumnGroup("8");
  5. ColumnGroup noveno= new ColumnGroup("9");
  6. ColumnGroup decimo= new ColumnGroup("10");
  7. ColumnGroup undecimo= new ColumnGroup("11");
  8.  
  9. MultiLineHeaderRenderer render= new MultiLineHeaderRenderer();
  10.  
  11. ModeloTabla modelo= null;
  12.  
  13. switch(tabla){
  14.      case 1:  /* se encarga de hacer que la tabla "tblCuadro1" tenga columnas grupales*/
  15.  
  16.         modelo= new ModeloTabla(10, new Object[]{
  17.                                              "Edad", "Total", "Hombres", "Mujeres", "Total", "Hombres", "Mujeres"
  18.                                              , "Total", "Hombres", "Mujeres", "Total", "Hombres", "Mujeres"
  19.                                              , "Total", "Hombres", "Mujeres", "Total", "Hombres", "Mujeres"});
  20.  
  21.                        tblCuadro1.setTableHeader(new GroupableTableHeader(
  22.                           ((GroupableTableColumnModel) tblCuadro1.getColumnModel())));
  23.                        tblCuadro1.setModel(modelo);
  24.  
  25.                total.add(tblCuadro1.getColumnModel().getColumn(1));
  26.                total.add(tblCuadro1.getColumnModel().getColumn(2));
  27.                total.add(tblCuadro1.getColumnModel().getColumn(3));
  28.  
  29.                setimo.add(tblCuadro1.getColumnModel().getColumn(4));
  30.                setimo.add(tblCuadro1.getColumnModel().getColumn(5));
  31.                setimo.add(tblCuadro1.getColumnModel().getColumn(6));
  32.  
  33.                octavo.add(tblCuadro1.getColumnModel().getColumn(7));
  34.                octavo.add(tblCuadro1.getColumnModel().getColumn(8));
  35.                octavo.add(tblCuadro1.getColumnModel().getColumn(9));
  36.  
  37.                noveno.add(tblCuadro1.getColumnModel().getColumn(10));
  38.                noveno.add(tblCuadro1.getColumnModel().getColumn(11));
  39.                noveno.add(tblCuadro1.getColumnModel().getColumn(12));
  40.  
  41.                decimo.add(tblCuadro1.getColumnModel().getColumn(13));
  42.                decimo.add(tblCuadro1.getColumnModel().getColumn(14));
  43.                decimo.add(tblCuadro1.getColumnModel().getColumn(15));
  44.  
  45.                undecimo.add(tblCuadro1.getColumnModel().getColumn(16));
  46.                undecimo.add(tblCuadro1.getColumnModel().getColumn(17));
  47.                undecimo.add(tblCuadro1.getColumnModel().getColumn(18));
  48.  
  49.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).addColumnGroup(total);
  50.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).addColumnGroup(setimo);
  51.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).addColumnGroup(octavo);
  52.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).addColumnGroup(noveno);
  53.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).addColumnGroup(decimo);
  54.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).addColumnGroup(undecimo);
  55.  
  56.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).getColumn(2).setPreferredWidth(90);
  57.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).getColumn(5).setPreferredWidth(90);
  58.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).getColumn(8).setPreferredWidth(90);
  59.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).getColumn(11).setPreferredWidth(90);
  60.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).getColumn(14).setPreferredWidth(90);
  61.               ((GroupableTableColumnModel) tblCuadro1.getColumnModel()).getColumn(17).setPreferredWidth(100);
  62.  
  63.                llenarTablas(tabla); // este método llena la tabla
  64.                break;
  65.  
  66.          case 2: /* se encarga de hacer que la tabla "tblCuadro2" tenga columnas grupales*/
  67.  
  68.              modelo= new ModeloTabla(10, new Object[]{
  69.                                        "Edad", "Total", "Hombres", "Mujeres", "Total", "Hombres", "Mujeres"
  70.                                       , "Total", "Hombres", "Mujeres", "Total", "Hombres", "Mujeres"
  71.                                       , "Total", "Hombres", "Mujeres", "Total", "Hombres", "Mujeres"});
  72.  
  73.                tblCuadro2.setTableHeader(new GroupableTableHeader(
  74.                                                           ((GroupableTableColumnModel) tblCuadro2.getColumnModel())));
  75.                tblCuadro2.setModel(modelo);
  76.  
  77.                ColumnGroup totalCuadro2= new ColumnGroup("Cantidad Total");
  78.                ColumnGroup setimoCuadro2= new ColumnGroup("7°");
  79.                ColumnGroup octavoCuadro2= new ColumnGroup("8°");
  80.                ColumnGroup novenoCuadro2= new ColumnGroup("9°");
  81.                ColumnGroup decimoCuadro2= new ColumnGroup("10°");
  82.                ColumnGroup undecimoCuadro2= new ColumnGroup("11°");
  83.  
  84.                totalCuadro2.add(tblCuadro2.getColumnModel().getColumn(1));
  85.                totalCuadro2.add(tblCuadro2.getColumnModel().getColumn(2));
  86.                totalCuadro2.add(tblCuadro2.getColumnModel().getColumn(3));
  87.  
  88.                setimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(4));
  89.                setimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(5));
  90.                setimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(6));
  91.  
  92.                octavoCuadro2.add(tblCuadro2.getColumnModel().getColumn(7));
  93.                octavoCuadro2.add(tblCuadro2.getColumnModel().getColumn(8));
  94.                octavoCuadro2.add(tblCuadro2.getColumnModel().getColumn(9));
  95.  
  96.                novenoCuadro2.add(tblCuadro2.getColumnModel().getColumn(10));
  97.                novenoCuadro2.add(tblCuadro2.getColumnModel().getColumn(11));
  98.                novenoCuadro2.add(tblCuadro2.getColumnModel().getColumn(12));
  99.  
  100.                decimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(13));
  101.                decimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(14));
  102.                decimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(15));
  103.  
  104.                undecimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(16));
  105.                undecimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(17));
  106.                undecimoCuadro2.add(tblCuadro2.getColumnModel().getColumn(18));
  107.  
  108.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).addColumnGroup(totalCuadro2);
  109.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).addColumnGroup(setimoCuadro2);
  110.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).addColumnGroup(octavoCuadro2);
  111.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).addColumnGroup(novenoCuadro2);
  112.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).addColumnGroup(decimoCuadro2);
  113.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).addColumnGroup(undecimoCuadro2);
  114.  
  115.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).getColumn(2).setPreferredWidth(90);
  116.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).getColumn(5).setPreferredWidth(90);
  117.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).getColumn(8).setPreferredWidth(90);
  118.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).getColumn(11).setPreferredWidth(90);
  119.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).getColumn(14).setPreferredWidth(90);
  120.                ((GroupableTableColumnModel) tblCuadro2.getColumnModel()).getColumn(17).setPreferredWidth(130);
  121.  
  122.                llenarTablas(tabla); // este método llena la tabla
  123.                break;
  124.    }
  125. }
  126.  

Realmente no se donde estará mi error, por que como dije anteriormente he usado los mismos "pasos" en otras partes de la aplicación y hay si todo  funciona bien, supongo que el error debe ser algo tonto pero como lo le estado dando vueltas al asunto no lo puedo visualizar, ojala me puedan dar una mano.

Ah bueno comento que en las demás tablas si me salen las tablas y con los datos correspondientes, solo que no salen las cabeceras para visualizar que se han agrupado las columnas y también presentan el mismo problema del reajuste del tamaño de la columna.

No se si me di a entender bien, me disculpan sino y me dicen por favor, realmente me interesa arreglar esto.

Para usar las columnas grupales utilizo el código que fue publicado en el siguiente enlace: http://www.swebb99.f2s.com/GroupableHeader/

Que tengan buen día o noche y gracias de antemano!!!
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines