Swing/SortKeyPersistence のバックアップ差分(No.2)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SortKeyPersistence へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
--- title: JTableのSortKeyを永続化し、ソート状態の保存と復元を行う tags: [JTable, RowSorter, XMLDecoder, XMLEncoder] author: aterai pubdate: 2015-09-21T01:26:03+09:00 description: JTableのSortKeyを永続化して、そのソート状態をXMLファイルで保存、復元できるように設定します。 --- * 概要 [#yb40aa78] `JTable`の`SortKey`を永続化して、そのソート状態を`XML`ファイルで保存、復元できるように設定します。 #download(https://lh3.googleusercontent.com/-x9GESOvXeyc/Vf7c-CY1veI/AAAAAAAAOCE/lUO7hcq8-fw/s800-Ic42/SortKeyPersistence.png) * サンプルコード [#y77bc390] #code(link){{ File file = File.createTempFile("output", ".xml"); try (XMLEncoder xe = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(file)))) { xe.setPersistenceDelegate( RowSorter.SortKey.class, new DefaultPersistenceDelegate(new String[] {"column", "sortOrder"})); xe.writeObject(table.getRowSorter().getSortKeys()); //... }} * 解説 [#za98b6c2] 上記のサンプルでは、`JTable`のソート状態を表す`RowSorter.SortKey`を永続化するため、以下のような設定を行っています。 - `RowSorter.SortKey`クラスのコンストラクタの引数をプロパティ名として`DefaultPersistenceDelegate`を作成 - `RowSorter.SortKey`クラスを`XML`で書き出すため、`XMLEncoder#setPersistenceDelegate(...)`で上記の`PersistenceDelegate`を設定 - 注: -- `TableModel`は、別途、[[JTableのモデルをXMLファイルで保存、復元する>Swing/PersistenceDelegate]]を使用 -- ヘッダカラムの幅や順序には対応していない --- メモ: [http://wiki.byte-welt.net/wiki/JTable_Inhalte_speichern JTable Inhalte speichern – Byte-Welt Wiki] --- または、以下のような`DefaultPersistenceDelegate`を使ってヘッダカラムの幅や順序を保存する方法がある #code{{ class DefaultTableColumnModelPersistenceDelegate extends DefaultPersistenceDelegate { @Override protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder encoder) { super.initialize(type, oldInstance, newInstance, encoder); DefaultTableColumnModel m = (DefaultTableColumnModel) oldInstance; for (int col = 0; col < m.getColumnCount(); col++) { Object[] o = {m.getColumn(col)}; encoder.writeStatement(new Statement(oldInstance, "addColumn", o)); } } } }} * 参考リンク [#bd8de50f] - [[JTableのモデルをXMLファイルで保存、復元する>Swing/PersistenceDelegate]] * コメント [#m7e19549] #comment #comment