Pregunta

Estoy intentando crear mi propia TableModel personalizado para mi JTable (porque me gustaría incorporar una fila de JCheckBox de en mi mesa.) Tengo el JTable en un JScrollPane también. Antes he tratado de incorporar el JCheckBox y costumbre AbstractTableModel, el JTable se presentaba bien si utiliza el valor predeterminado (Object [] [], Object []) constructor. He leído en el tutorial JTable en el Sol que los constructores utilizan un defecto de tratar todos los datos como cadenas.

Entonces creé mi costumbre AbstractTableModel y fui de esto:

JTable table = new JTable(dataArray, col);

A esto:

JTable table = new JTable();

Estoy asumiendo que esto llamaría intento de crear el JTable con la clase a medida que se extiende AbstractTableModel, pero ahora no aparece nada en el JScrollPane.

Estoy utilizando de forma incorrecta? Yo prácticamente copiado el código del tutorial de Sun y sólo cambiaron los nombres de los archivos de datos involucrados. También coloqué este método en la misma clase. ¿Hay una manera diferente para asegurarse de que se crea la mesa con su tabla Modelo de encargo? Cualquier penetración sería apreciada.

¿Fue útil?

Solución

JTable tiene varios constructores que toman un TableModel como parámetro. Es eso lo que está buscando? Desde el fragmento de código que ha proporcionado, parece como si estuviera llamando al constructor por defecto y esperando que utilice el modelo de tabla personalizada de alguna manera. (Tal vez hay algo de código que falta que hace esto?). Si se utiliza el constructor predeterminado, JTable creará una instancia interna DefaultTableModel y usar eso.

Editar: Los comentarios no toman código muy bien, por lo que agregar aquí: Para obtener la tabla a utilizar su modelo, que haría algo como esto:

MyTableModel model = new MyTableModel();
// ...initialise model if required
JTable table = new JTable(model);

Otros consejos

A medida que ha observado, Ash está justo en pasar sobre el modelo de datos en el JTable constructor. Si getColumnClass() de su modelo vuelve Boolean.class, obtendrá una casilla de verificación procesador por defecto . Es posible que como este ejemplo que ilustra el uso de un intérprete personalizado y editor.

OK. Después de revisar mi código me di cuenta de que si me voy a cabo ningún constructor, no va a encontrar el enlace a su modelo de tabla personalizado. Por lo tanto, si ha creado la clase:

class MyTableModel extends AbstractTableModel {
//code here
}

Es necesario crear una instancia en el constructor de JTable como esto:

JTable table = new JTable(new MyTableModel());

Por lo que no se puede dejar en blanco y esperar que "encontrar" la nueva clase AbstractTableModel.

Es necesario extender AbstractTableModel, y pasar esto como un parámetro para el constructor de la JTable. (Como Marc hace). Además del método requerido, es necesario definir este método para mostrar las casillas de verificación reales:

 public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

Esto le dice que JTable cómo representar cada célula. Si no anular esta, que sólo se mostró como una cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top