setvalueat setmodel columnas autoresizemode agregar java swing jtable

columnas - setmodel java



Extensión de la columna JTable (3)

Necesita escribir su propia TableUI para la tabla maestra. También puede ser útil utilizar su propio TableModel para guardar datos adicionales, como si se ampliara una fila. Pero esto es opcional

Escribo igual a TableUI que expande una fila y muestra un editor de texto. En TableUI necesita cambiar dinámicamente la altura de la fila con table.setRowHeight (height). También es necesario copiar algunas cosas de BaseTableUI porque no puede acceder a las cosas privadas.

Estoy tratando de hacer una JTable que tenga JTable columnas disponibles. Específicamente, estoy buscando anidar una JTable dentro de otra JTable , y cuando el usuario hace clic para ver la tabla anidada, debe expandirse para presionar hacia abajo las filas a continuación y llenar el espacio vacío. Esto es similar a lo que ve en MS Access donde puede anidar tablas, y al hacer clic en el botón expandir en una fila, se mostrarán las entradas correspondientes en la tabla anidada.

Si alguien sabe de una forma de realizar un tramo de columna con JTable , ¿puede indicarme la dirección correcta? O si conoce una forma alternativa de hacerlo, estoy abierto a sugerencias. La aplicación se está construyendo con Swing. Los elementos de la tabla, tanto de alto como de bajo nivel, deben poder editarse en cualquier solución. Usar JTable anidado s esto no será un problema, y ​​cualquier otra solución debería tener esto en cuenta también.


Como un puntero en la dirección correcta, pruebe este artículo en SwingWiki que explica bastante bien el método de columna TableUI. Antes de esto, también probé algunas alternativas, como anular los métodos de pintura TableCellRenderer sin mucho éxito.


Basado en el Código de Code-Guru:

/* * (swing1.1beta3) * * |-----------------------------------------------------| * | 1st | 2nd | 3rd | * |-----------------------------------------------------| * | | | | | | | */ //package jp.gr.java_conf.tame.swing.examples; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import jp.gr.java_conf.tame.swing.table.*; /** * @version 1.0 11/09/98 */ public class MultiWidthHeaderExample extends JFrame { MultiWidthHeaderExample() { super( "Multi-Width Header Example" ); DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector(new Object[][]{ {"a","b","c","d","e","f"}, {"A","B","C","D","E","F"}}, new Object[]{"1 st","","","","",""}); JTable table = new JTable( dm ) { protected JTableHeader createDefaultTableHeader() { return new GroupableTableHeader(columnModel); } }; TableColumnModel cm = table.getColumnModel(); ColumnGroup g_2nd = new ColumnGroup("2 nd"); g_2nd.add(cm.getColumn(1)); g_2nd.add(cm.getColumn(2)); ColumnGroup g_3rd = new ColumnGroup("3 rd"); g_3rd.add(cm.getColumn(3)); g_3rd.add(cm.getColumn(4)); g_3rd.add(cm.getColumn(5)); GroupableTableHeader header = (GroupableTableHeader)table.getTableHeader(); header.addColumnGroup(g_2nd); header.addColumnGroup(g_3rd); JScrollPane scroll = new JScrollPane( table ); getContentPane().add( scroll ); setSize( 400, 100 ); header.revalidate(); } public static void main(String[] args) { MultiWidthHeaderExample frame = new MultiWidthHeaderExample(); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit(0); } }); frame.setVisible(true); } }

Fuente: http://www.codeguru.com/java/articles/125.shtml (no disponible desde 2012, ver ahora en el archivo web )

Otros recursos: