2

我正在为应用程序编写一些 UI 持久性方法。我正在尝试扩展为在表模型中具有一组固定的 N 列的 JXTable。

如何获取和设置 JXTable 中列 #k 的以下信息,其中 k 是表模型顺序中的列号?这并不像听起来那么容易,或者至少我错过了一些棘手的信息。

  • 列宽
  • 列可见性
  • 列顺序

TableColumnModelExt.getColumns()包括这个疯狂的笔记,我无法解析:

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

返回包含的 TableColumns 的列表。包括或排除不可见的列,具体取决于 includeHidden 是真还是假。如果为 false,则 List 上的 Iterator 等效于 getColumns() 返回的 Enumeration。

注意:列表中列的顺序取决于是否包含不可见列,在前一种情况下是插入顺序,在后一种情况下是可见列的当前顺序。

另外,我知道如何使用JTable.convertColumnIndexToView(),但它为隐藏列返回 -1 ,并且没有留下关于如果隐藏列再次可见时隐藏列的顺序的信息。JXTable 知道这些信息,因为您可以恢复列的可见性,并将列置于隐藏之前的位置。

4

2 回答 2

3

如果我对您的理解正确,您将在视图列索引之后隐藏列如果再次可见。这不是直接支持的。

出于保存/恢复的目的,在 AppFramework 的上下文中有一个XProperties 类(不受官方支持,但工作顺利),这可能会让您了解如何做到这一点。

编辑

要通过modelIndex获取TableColumn,获取所有列,循环并比较modelIndex。伪方法getColumnFor(modelIndex)中的一些伪代码:

List allColumns = table.getColumns(true);
forEach {
   if (column.getModelIndex() == modelIndex) {
        return column;
   }
return null;
于 2011-12-02T18:57:51.733 回答
1

考虑使用Swing 应用程序框架(JSR-296)

虽然这个项目现在已经死了 AFAIK,但我认为这是一个比从头开始实现这个功能更好的起点。(它是开源的。)

如果您在 NetBeans 平台之上构建应用程序(我强烈推荐),请查看我的博客,了解如何一起使用这两个框架:

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

注意:还有Better 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. 

我对此知之甚少,但这可能是一个更好的起点。

于 2011-12-02T18:44:04.910 回答