Pregunta

Estoy escribiendo algunos métodos de persistencia de UI para una aplicación. Estoy tratando de expandirme a un JXTable con un conjunto fijo de n columnas en el modelo de tabla.

¿Cómo puedo obtener y establecer la siguiente información para la columna #K en el JXTable, donde K está el número de columna en el orden del modelo de tabla? No es tan fácil como parece, o al menos me falta información difícil.

  • ancho de columna
  • visibilidad de columna
  • orden de columna

TableColumnModelExt.getColumns() Incluye esta loca nota, que tengo problemas para analizar:

java.util.List<javax.swing.table.TableColumn> getColumns(boolean includeHidden)

Devuelve una lista de Tablecolumns contenidas. Incluye o excluye columnas invisibles, dependiendo de si el incluido incluido es verdadero o falso, respectivamente. Si es falso, un iterador sobre la lista es equivalente a la enumeración devuelta por GetColumns ().

Nota: El orden de las columnas en la lista depende de si las columnas invisibles están incluidas o no, en el primer caso es el orden de inserción en el segundo es el orden actual de las columnas visibles.

Además, sé cómo usar JTable.convertColumnIndexToView(), pero devuelve -1 para columnas ocultas, y no deja información sobre qué orden iría la columna oculta si fuera visible nuevamente. JXTable conoce esta información porque puede restaurar la visibilidad de la columna, y pone la columna donde estaba antes de que estuviera oculto.

¿Fue útil?

Solución

Si lo entiendo correctamente, está después del índice de la columna de vista, una columna oculta lo habría hecho si se volviera visible nuevamente. Eso no es directamente compatible.

Para fines de guardar/restaurar, hay un clase XProperties (No es oficialmente compatible, pero trabajando sin problemas) Hacerlo en el contexto de AppFramework que podría darle una idea de cómo hacerlo.

Editar

Para obtener una Tablecolumna de ModelIndex, obtenga todas las columnas, bucle y compare el ModelIndex. Algún pseudocódigo en un pseudo método getColumnfor (modelindex):

List allColumns = table.getColumns(true);
forEach {
   if (column.getModelIndex() == modelIndex) {
        return column;
   }
return null;

Otros consejos

Considere usar el Marco de aplicaciones swing (JSR-296)

Aunque este proyecto ahora está muerto AFAIK, creo que es un mejor punto de partida que implementar esta función desde cero. (Es de código abierto).

Si está creando su aplicación en la parte superior de la plataforma NetBeans (que recomiendo encarecidamente), eche un vistazo a mi blog sobre cómo usar estos dos marcos juntos:

http://puces-log.blogspot.com/2009/04/netbeans-platform-meets-swing.html

Nota: también está el Mejor marco de aplicaciones de swing

The Better Swing Application Framework is a fork of the original Swing Application Framework (appframework) reference implementation of JSR 296. Since August 2009, the original Swing Application Framework project has been on hold, and therefore this fork was created to carry on the work until the original project resumes. 

No sé mucho sobre esto, pero podría ser incluso un mejor punto de partida.

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