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

[SOLUCIONADO] Fila fija en JTable sin dos tablas

Estas en el tema de Fila fija en JTable sin dos tablas en el foro de Java en Foros del Web. Buenas a todos! Quisiera crear en un JTable una fila fija que no se desplace con el scroll. Esto lo se hacer con dos tablas, ...
  #1 (permalink)  
Antiguo 03/08/2016, 02:48
 
Fecha de Ingreso: enero-2016
Mensajes: 16
Antigüedad: 8 años, 2 meses
Puntos: 1
Fila fija en JTable sin dos tablas

Buenas a todos!
Quisiera crear en un JTable una fila fija que no se desplace con el scroll.
Esto lo se hacer con dos tablas, el problema es que debe aparecer o desaparecer en funcion de un JRadioButton y con las dos tablas se queda el espacio vacío de la tabla fija en vez de ocupar todo la principal.

Seguro existe una forma simple de lograrlo, pero no la encuentro.
Gracias por vuestra ayuda por adelantado

Un saludo!
  #2 (permalink)  
Antiguo 04/08/2016, 04:26
 
Fecha de Ingreso: enero-2016
Mensajes: 16
Antigüedad: 8 años, 2 meses
Puntos: 1
Respuesta: Fila fija en JTable sin dos tablas

Encontre una solución un poco chapucera... pero la dejo por si a alguien le interesa:

Código Java:
Ver original
  1. public class tablaFija extends JFrame{
  2.    
  3.     Object[][] data;
  4.     Object[] column;
  5.     JScrollPane scroll, mainScroll, fixedScroll;
  6.     JTable table, fixedTable;  
  7.     DefaultTableModel modelo;
  8.     JPanel pCentral;
  9.    
  10.     public tablaFija(){
  11.         super("Tabla Fija");
  12.        
  13.         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  14.        
  15.         //creamos datos
  16.          data = new Object[][] { { "a", "", "", "", "", "" },
  17.                     { "", "b", "", "", "", "" }, { "", "", "c", "", "", "" },
  18.                     { "", "", "", "d", "", "" }, { "", "", "", "", "e", "" },
  19.                     { "", "", "", "", "", "f" },
  20.                     { "fixed1", "", "", "", "", "", "", "" },
  21.                     { "fixed2", "", "", "", "", "", "", "" } };
  22.          column = new Object[] { "A", "B", "C", "D", "E", "F" };
  23.  
  24.          //creamos el panelCentral con CardLayout
  25.          pCentral = new JPanel();
  26.          getContentPane().add(pCentral, BorderLayout.CENTER);
  27.          CardLayout card = new CardLayout();
  28.          pCentral.setLayout(card);
  29.          
  30.         //creamos el JScrollPane sin elementos fijos
  31.          scroll = new JScrollPane(table);
  32.          scroll.setPreferredSize(new Dimension(400, 100));
  33.          
  34.          
  35.          //creamos el panel con elementos fijos
  36.          JPanel pFijo = new JPanel();
  37.          pFijo.setLayout(new BorderLayout(0, 0));
  38.          
  39.          //añadimos los dos CardLayout
  40.          pCentral.add(scroll, "op1");
  41.          pCentral.add(pFijo, "op2");
  42.          
  43.          /**
  44.           * CREAMOS EL CONTENIDO DEL PANEL CON FILA FIJA
  45.           */
  46.          
  47.          //creamos el modelo de la tabla móbil
  48.          modelo = new DefaultTableModel(data, column); 
  49.          
  50.          //creamos la tabla de elementos móbiles
  51.          table = new JTable(modelo);
  52.          table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  53.          table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  54.          
  55.         /* creamos modelo de la tabla fija del panel "pFijo" */
  56.         AbstractTableModel fixedModel = new AbstractTableModel() {
  57.             public int getColumnCount() {
  58.                 return column.length;
  59.             }
  60.             public int getRowCount() {
  61.                 return 1;
  62.             }      
  63.             public Object getValueAt(int row, int col) {
  64.                 return 1;   //fijo todos los valores a 1 para el ejemplo
  65.             }
  66.         };
  67.  
  68.         /* creamos tabla fija del panel "pFijo" */
  69.         fixedTable = new JTable(fixedModel);
  70.         fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  71.         fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  72.        
  73.         // creamos el Scroll de los elementos móbiles del panel "pFijo" con "table"
  74.         mainScroll = new JScrollPane(table){
  75.             public void setColumnHeaderView(Component view) {
  76.                 //No muestra la cabecera en la tabla
  77.             }
  78.         };
  79.         mainScroll.setPreferredSize(new Dimension(400, 100));
  80.         mainScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  81.  
  82.         /* creamos el Scroll de la tabla fija (muestra la cabecera) */
  83.         fixedScroll = new JScrollPane(fixedTable);
  84.         fixedScroll.setPreferredSize(new Dimension(400, 37));
  85.        
  86.         /* la tabla fija no muestra nunca el scroll horizontal */
  87.         fixedScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  88.        
  89.         /* para poner un cuadrado gris donde deberia ir el scroll vertical de la tabla fija */
  90.         fixedScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  91.        
  92.         JScrollBar bar = fixedScroll.getVerticalScrollBar();
  93.         JScrollBar dummyBar = new JScrollBar() {
  94.             public void paint(Graphics g) {
  95.             }
  96.         };
  97.         dummyBar.setPreferredSize(bar.getPreferredSize());
  98.         fixedScroll.setVerticalScrollBar(dummyBar);
  99.  
  100.         /* para mover con un solo scroll horizontal las dos tablas del panel "pFijo" */
  101.         final JScrollBar bar1 = mainScroll.getHorizontalScrollBar();
  102.         JScrollBar bar2 = fixedScroll.getHorizontalScrollBar();
  103.         bar1.addAdjustmentListener(new AdjustmentListener() {
  104.             public void adjustmentValueChanged(AdjustmentEvent e) {
  105.                 bar2.setValue(e.getValue());
  106.             }
  107.         });  
  108.        
  109.         //colocamos en el panel pFijo las dos tablas    
  110.         pFijo.add(mainScroll, BorderLayout.CENTER);
  111.         pFijo.add(fixedScroll, BorderLayout.NORTH);
  112.            
  113.         /**
  114.                     * CREAMOS BOTON Y LOS CAMBIOS AL PULSARLO
  115.        */
  116.         JPanel pBoton = new JPanel();
  117.         getContentPane().add(pBoton, BorderLayout.NORTH);
  118.         JRadioButton rdbtnBoton = new JRadioButton("Boton");
  119.         pBoton.add(rdbtnBoton);
  120.          
  121.         //al pulsar el boton
  122.         rdbtnBoton.addItemListener(new ItemListener() {
  123.             @Override
  124.             public void itemStateChanged(ItemEvent e) {
  125.                 if(e.getStateChange()==ItemEvent.SELECTED){
  126.                     /* si esta pulsado muestra el scroll sin elementos fijos */
  127.                     scroll.setViewportView(table);
  128.                     card.show(pCentral, "op1");                
  129.                 }else{
  130.                     /* Al deselecionar muestra la tabla el panel "pFijo" con las dos tablas (fija y movil)*/
  131.                     fixedScroll.setViewportView(fixedTable);
  132.                     mainScroll.setViewportView(table);
  133.                     card.show(pCentral, "op2");
  134.                 }
  135.             }
  136.         });        
  137.     }

Etiquetas: fija, fila, jtable, tablas
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 21:21.