Swing/SortKeyPersistence の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/SortKeyPersistence へ行く。
- Swing/SortKeyPersistence の差分を削除
--- category: swing folder: SortKeyPersistence title: JTableのSortKeyを永続化し、ソート状態の保存と復元を行う tags: [JTable, RowSorter, XMLDecoder, XMLEncoder] author: aterai pubdate: 2015-09-21T01:26:03+09:00 description: JTableのSortKeyを永続化して、そのソート状態をXMLファイルで保存、復元できるように設定します。 image: https://lh3.googleusercontent.com/-x9GESOvXeyc/Vf7c-CY1veI/AAAAAAAAOCE/lUO7hcq8-fw/s800-Ic42/SortKeyPersistence.png --- * 概要 [#summary] `JTable`の`SortKey`を永続化して、そのソート状態を`XML`ファイルで保存、復元できるように設定します。 #download(https://lh3.googleusercontent.com/-x9GESOvXeyc/Vf7c-CY1veI/AAAAAAAAOCE/lUO7hcq8-fw/s800-Ic42/SortKeyPersistence.png) * サンプルコード [#sourcecode] #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()); // ... }} * 解説 [#explanation] 上記のサンプルでは、`JTable`のソート状態を表す`RowSorter.SortKey`を永続化するため、以下のような設定を行っています。 - `RowSorter.SortKey`クラスのコンストラクタの引数をプロパティ名として`DefaultPersistenceDelegate`を作成 - `RowSorter.SortKey`クラスを`XML`で書き出すため、`XMLEncoder#setPersistenceDelegate(...)`で上記の`PersistenceDelegate`を設定 - `TableModel`の書出しには、別途[[JTableのモデルをXMLファイルで保存、復元する>Swing/PersistenceDelegate]]を使用 - `TableModel`の書出しには別途[[JTableのモデルをXMLファイルで保存、復元する>Swing/PersistenceDelegate]]を使用 -- このサンプルでは、カラムヘッダの幅や順序には対応していない -- [http://wiki.byte-welt.net/wiki/JTable_Inhalte_speichern JTable Inhalte speichern – Byte-Welt Wiki] -- [[TableColumnModelをXMLファイルで保存、復元する>Swing/ColumnModelPersistence]]のような`DefaultPersistenceDelegate`を使ってカラムヘッダの幅や順序を保存する方法もある * 参考リンク [#reference] - [[JTableのモデルをXMLファイルで保存、復元する>Swing/PersistenceDelegate]] - [[TableColumnModelをXMLファイルで保存、復元する>Swing/ColumnModelPersistence]] * コメント [#comment] #comment - 大変勉強になります。`JTable`の列入替え(`Drag&Drop`操作による)の状態も保存することは可能なのでしょうか? -- &user(hirohiro); &new{2015-11-11 (水) 17:57:58}; -- @hirohiro さん、こんばんは。`JTable`の列入替えの状態を保存する場合、`DefaultTableColumnModel`用の`DefaultPersistenceDelegate`を作成してヘッダカラムの幅や順序を保存する方法があります(記事の解説も追加・修正しました)。 -- &user(aterai); &new{2015-11-13 (金) 17:57:58}; -- サンプルコード: [https://gist.github.com/aterai/c9b8d33d04f848d552fa DefaultTableColumnModelPersistenceDelegateTest.java ] -- 他にも、[http://wiki.byte-welt.net/wiki/JTable_Inhalte_speichern JTable Inhalte speichern – Byte-Welt Wiki]のように`getter`や`setter`を`DefaultTableColumnModel`に追加して`XMLEncoder/XMLDecoder`する方法もあるようです。 #comment