2011-12-02 69 views
2

我正在为应用程序编写一些UI持久性方法。我试图扩展到JXTable,在表模型中有一组固定的N列。JXTable:如何查询列模型的状态?

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

  • 列宽
  • 列知名度
  • 列顺序

TableColumnModelExt.getColumns()包括这个疯狂的说明,其中我有麻烦解析:

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

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

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

而且,我知道如何使用JTable.convertColumnIndexToView(),但它隐藏的列返回-1,并没有留下有关哪些命令,如果它再次可见时,隐藏的列会去。 JXTable知道这些信息是因为您可以恢复列可见性,并且它将列放在隐藏之前的位置。

+0

你为什么觉得这很疯狂?小心:我写了文档和JXTable的其他几乎所有内容:-) – kleopatra

+0

好的,好的,让我对这个客观一点。 JXTable使用与JTable不同的术语。 JXTable使用“插入顺序”和“可见列的当前顺序”,而JTable使用“视图”和“模型”的索引。如果“查看顺序”=“可见列的当前顺序”和“模型顺序”=“插入顺序”,那么如果JXTable文档与JTable.convertColumnIndexToView所表示的这些概念相对应,这将非常有帮助。 –

+1

查看你的目标点 - 但是插入顺序可能与模型顺序不同,如果......以及最初的列未按照模型顺序插入:-)在支持隐藏列的情况下,JXTable添加了一个额外的“维度”:再次显示隐藏的列必须支持在隐藏的时刻将其移动到最接近其视图位置的位置,而不是移动可见列。所以有第三个坐标系:当前视图(当前可见),潜在视图(当所有隐藏都可见)和模型。更好地阐明这一事实的贡献已被高兴地接受:-) – kleopatra

回答

3

如果我正确地理解了你,你是在隐藏的列将会有视图列索引后,如果再次可见。这不是直接支持。

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

编辑

要通过modelIndex得到TableColumn中,让所有列,循环和比较modelIndex。伪代码中的一些伪代码getColumnFor(modelIndex):

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

嗯。那么,好的,给定模型索引的最简单方法是从JXTable中获取TableColumn(无论是否可见)? –

+0

aha,好的,谢谢! idk为什么我没有想到这一点。 –

1

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

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

如果您建立您在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. 

我不知道很多关于这一点,但它可能甚至更好的起点。

+0

谢谢,但我的问题实际上不是持久性;我已经有了一个适合我的框架。我的问题是关于获取/设置GUI组件上的信息。 –