2

アプリケーションの UI 永続化メソッドをいくつか書いています。テーブル モデルに固定された N 列のセットを持つ JXTable に拡張しようとしています。

JXTable の列 #k について次の情報を取得および設定するにはどうすればよいですか。ここで、k はテーブル モデルの順序での列番号です。思ったほど簡単ではありません。少なくとも、いくつかのトリッキーな情報が欠けています。

  • 列幅
  • 列の可視性
  • 列の順序

TableColumnModelExt.getColumns()解析に問題があるこのクレイジーなメモが含まれています。

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

含まれている TableColumns のリストを返します。includeHidden が true か false かに応じて、非表示の列をそれぞれ含めるか除外します。false の場合、List に対する Iterator は、getColumns() によって返される Enumeration と同等です。

注: リスト内の列の順序は、非表示の列が含まれているかどうかによって異なります。前者の場合は挿入順序であり、後者の場合は表示されている列の現在の順序です。

また、使用方法は知ってJTable.convertColumnIndexToView()いますが、非表示の列に対して -1 を返し、非表示の列が再び表示された場合にどの順序になるかについての情報を残しません。JXTable は、列の可視性を復元できるため、この情報を認識しており、非表示になる前の場所に列を配置します。

4

2 に答える 2

3

私があなたを正しく理解していれば、非表示の列が再び表示された場合のビュー列のインデックスの後にいます。それは直接サポートされていません。

保存/復元の目的で、XProperties クラス(公式にはサポートされていませんが、スムーズに動作します) があり、AppFramework のコンテキストでそれを行う方法がわかります。

編集

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 Application Framework (JSR-296)の使用を検討してください

このプロジェクトは今では死んでいますが、この機能を最初から実装するよりも良い出発点だと思います。(オープンソースです。)

NetBeans プラットフォーム (これを強くお勧めします) 上にアプリケーションを構築している場合は、これら 2 つのフレームワークを一緒に使用する方法についての私のブログを参照してください。

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. 

これについてはよくわかりませんが、より良い出発点になるかもしれません。

于 2011-12-02T18:44:04.910 に答える