A mí me pasó exactamente lo mismo y lo que hice fué crearme un panel, al que le paso como parámetros un String[ ][ ] con los datos que quiero visualizar, el número de filas y el numero de columnas de la tabla, y este panel lo pongo sobre un ScrollPane del contenedor donde quiero que se vea.
La solución es un poco chapuza pero funciona. Lo que no he hecho es poder seleccionar una fila entera o una columna, aunque no parece muy complicado. A ver si te gusta:
Utilicé el JBuilder de ahí los jbcl.layout y jbcl.control
import java.awt.*;
import java.awt.event.*;
import borland.jbcl.layout.*;
import borland.jbcl.control.*;
public class PanelDatos extends Panel {
XYLayout xYLayout1 = new XYLayout();
int ancho=100;
int alto=22;
int x=1;
int y=1;
protected int NumFilas;
protected int NumColumnas;
public PanelDatos()
{
try
{
jbInit();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public PanelDatos(String[][] datos,int NumFilas,int NumColumnas)
{
this.NumFilas=NumFilas;
this.NumColumnas=NumColumnas;
try
{
jbInit();
for (int i=0;i<NumFilas;i++)
{
for (int j=0;j<NumColumnas;j++)
{
TextField celda = new TextField();
celda.setBackground(SystemColor.info);
this.add(celda, new XYConstraints(x, y,ancho, -1),-1);
celda.setText(datos[i][j]);
celda.setVisible(true);
x=x+ancho;
}
x=1;
y=y+alto;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void jbInit() throws Exception
{
this.setBackground(SystemColor.control);
xYLayout1.setWidth(NumFilas*alto);
xYLayout1.setHeight(NumColumnas*ancho);
this.setLayout(xYLayout1);
}
}
Esto, como te digo lo tienes que incluir en un ScrollPane
....
PanelDatos PD = new PanelDatos(datos,NumFilas,NumColumnas);
FormDatos Fram = new FormDatos();
Fram.setLayout(xYLayout1);
ScrollPane PanelScroll = new ScrollPane();
PanelScroll.setSize(699,299);
PanelScroll.add(PD);
Fram.add(PanelScroll,new XYConstraints(10,20,650,350));
Fram.setLocation(31,161);
Fram.setSize(699,399);
Fram.setVisible(true);