Tengo un JTable con un predefinidas de modelo

cómo hacer el modelo para insertar una columna específica en una posición específica ?

así que quiero algo como : DefaultTableModel.insertRow(int,Object[]) para las columnas

InformationsquelleAutor MhdSyrwan | 2012-01-01

4 Comentarios

  1. 4

    De verdad es necesario agregar la columna en su TableModel en un índice específico ? Puede ajustar fácilmente el orden de las columnas en la vista (la JTable) como se documenta en la clase de javadoc de JTable

    Por defecto, las columnas pueden ser reorganizadas en el JTable para que la vista en las columnas aparecen en un orden diferente al de las columnas en el modelo. Esto no afecta a la aplicación del modelo a todos: cuando las columnas son reordenados, el JTable mantiene el nuevo orden de las columnas internamente y convierte sus índices de columna antes de consultar el modelo.

    Esto se logra mediante el uso de la JTable#moveColumn método.

    Agregar una columna a su DefaultTableModel se hace llamar el DefaultTableModel#addColumn método

    • volver a ordenar las columnas de Jtable afecta el modelo ?
    • No. Esto es aún incluido en mi respuesta (en el fragmento copiado de la javadoc). El orden en el punto de vista es completamente independiente del orden en el modelo. Esa es la razón por la JTable dispone de todos aquellos convertir índice de métodos como, por ejemplo, convertColumnIndexToModel
    • ok , esto podría hacer que los problemas con mí , entonces, ¿cómo addColumn sin agregarlo a la modelo ? ¿JTable.addColumn afectan al modelo ?
    • No. El JTable en sí no contiene datos. Todos los datos se recuperan de la modelo. Usted podría considerar la decoración de un modelo existente para agregar una columna adicional sin afectar a su modelo original. Y mediante el uso de un decorador, usted puede agregar la columna en cualquier índice que desee
  2. 4

    No hay insertColumn método como DefaultTableModel.insertRow() para insertar filas. Para insertar una columna en una posición determinada, debe anexar la columna usando DefaultTable.addColumn() y, a continuación, mueva la nueva columna a la posición deseada.

        JTable table = new JTable(rows, cols);
        table.setAutoCreateColumnsFromModel(false);
    
        DefaultTableModel model = (DefaultTableModel)table.getModel();
        TableColumn col = new TableColumn(model.getColumnCount());
    
        col.setHeaderValue(headerLabel);
        table.addColumn(col);
        model.addColumn(headerLabel.toString(), values);
        table.moveColumn(table.getColumnCount()-1, vColIndex);
  3. 0

    Con DefaultTableModel:

    Al final uno tiene que llamar a fireDataChanged. Sólo hay un addColumn con varias sobrecargas. Esto no es obstáculo como el el fin de de pantalla es independiente. Uno puede mover una columna a otra posición, y tiene que tener cuidado de índice de vista != índice de columna. Para obtener el punto de vista correcto índice inmediatamente después de la adición de la columna, uno tiene acceso a la JTable y llame a moveColumn.

    He encontrado es a veces más fácil crear una nueva TableModel y asignar ese. O no utilizar el DefaultTableModel.

    • al final uno tiene que llamar a fireDataChanged No. a) la adición de una columna está cambiando la estructura, por lo que el evento adecuado para el fuego es structureChanged en una costumbre de la implementación del modelo b) dtm.addColumn(..) ya se dispara el evento correcto, sin necesidad de hacer nada
  4. -1

    este enlace puede ayudar
    http://www.roseindia.net/java/example/java/swing/InsertColumn.shtml

    public void positionColumn(JTable table,int col_Index) {
     table.moveColumn(table.getColumnCount()-1, col_Index);
      }
    • nada nuevo en comparación con las anteriores respuestas, que hay 😉
    • envolver el método exacto de la llamada ya se utiliza en la respuesta más completa por yannis hristofakis en otro método, que no añada valor no … agregar ningún valor 😉 votada abajo.

Dejar respuesta

Please enter your comment!
Please enter your name here