Encontre una solución un poco chapucera... pero la dejo por si a alguien le interesa:
Código Java:
Ver originalpublic class tablaFija
extends JFrame{
public tablaFija(){
super("Tabla Fija");
setDefaultCloseOperation
(JFrame.
DISPOSE_ON_CLOSE);
//creamos datos
data
= new Object[][] { { "a",
"",
"",
"",
"",
"" },
{ "", "b", "", "", "", "" }, { "", "", "c", "", "", "" },
{ "", "", "", "d", "", "" }, { "", "", "", "", "e", "" },
{ "", "", "", "", "", "f" },
{ "fixed1", "", "", "", "", "", "", "" },
{ "fixed2", "", "", "", "", "", "", "" } };
column
= new Object[] { "A",
"B",
"C",
"D",
"E",
"F" };
//creamos el panelCentral con CardLayout
pCentral.setLayout(card);
//creamos el JScrollPane sin elementos fijos
scroll.
setPreferredSize(new Dimension(400,
100));
//creamos el panel con elementos fijos
//añadimos los dos CardLayout
pCentral.add(scroll, "op1");
pCentral.add(pFijo, "op2");
/**
* CREAMOS EL CONTENIDO DEL PANEL CON FILA FIJA
*/
//creamos el modelo de la tabla móbil
//creamos la tabla de elementos móbiles
table.
setAutoResizeMode(JTable.
AUTO_RESIZE_OFF);
/* creamos modelo de la tabla fija del panel "pFijo" */
public int getColumnCount() {
return column.length;
}
public int getRowCount() {
return 1;
}
public Object getValueAt
(int row,
int col
) { return 1; //fijo todos los valores a 1 para el ejemplo
}
};
/* creamos tabla fija del panel "pFijo" */
fixedTable
= new JTable(fixedModel
); fixedTable.
setAutoResizeMode(JTable.
AUTO_RESIZE_OFF);
// creamos el Scroll de los elementos móbiles del panel "pFijo" con "table"
public void setColumnHeaderView
(Component view
) { //No muestra la cabecera en la tabla
}
};
mainScroll.
setPreferredSize(new Dimension(400,
100)); mainScroll.
setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_AS_NEEDED);
/* creamos el Scroll de la tabla fija (muestra la cabecera) */
fixedScroll.
setPreferredSize(new Dimension(400,
37));
/* la tabla fija no muestra nunca el scroll horizontal */
fixedScroll.
setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_NEVER);
/* para poner un cuadrado gris donde deberia ir el scroll vertical de la tabla fija */
fixedScroll.
setVerticalScrollBarPolicy(JScrollPane.
VERTICAL_SCROLLBAR_ALWAYS);
JScrollBar bar
= fixedScroll.
getVerticalScrollBar(); }
};
dummyBar.setPreferredSize(bar.getPreferredSize());
fixedScroll.setVerticalScrollBar(dummyBar);
/* para mover con un solo scroll horizontal las dos tablas del panel "pFijo" */
final JScrollBar bar1
= mainScroll.
getHorizontalScrollBar(); JScrollBar bar2
= fixedScroll.
getHorizontalScrollBar(); bar2.setValue(e.getValue());
}
});
//colocamos en el panel pFijo las dos tablas
/**
* CREAMOS BOTON Y LOS CAMBIOS AL PULSARLO
*/
pBoton.add(rdbtnBoton);
//al pulsar el boton
@Override
/* si esta pulsado muestra el scroll sin elementos fijos */
scroll.setViewportView(table);
card.show(pCentral, "op1");
}else{
/* Al deselecionar muestra la tabla el panel "pFijo" con las dos tablas (fija y movil)*/
fixedScroll.setViewportView(fixedTable);
mainScroll.setViewportView(table);
card.show(pCentral, "op2");
}
}
});
}