JXTable:如何在列模型上查询状态?

时间:2011-12-02 18:30:35

标签: java swing swingx jxtable tablecolumn

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

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

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

TableColumnModelExt.getColumns()包含了这个疯狂的注释,我在解析时遇到了问题:

  

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

     

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

     

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

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

2 个答案:

答案 0 :(得分:3)

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

为了保存/恢复目的,在AppFramework的上下文中有一个class XProperties(没有正式支持,但工作顺利),这可能会让你知道如何做到这一点。

修改

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

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

答案 1 :(得分:1)

考虑使用Swing Application Framework(JSR-296)

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

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

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

注意:还有Better Swing Application Framework

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. 

我对此并不了解,但它可能是一个更好的起点。