• title: JTableのSortKeyを永続化し、ソート状態の保存と復元を行う tags: [JTable, RowSorter, XMLDecoder, XMLEncoder] author: aterai pubdate: 2015-09-21T01:26:03+09:00 description: JTableのSortKeyを永続化して、そのソート状態をXMLファイルで保存、復元できるように設定します。

概要

JTableSortKeyを永続化して、そのソート状態をXMLファイルで保存、復元できるように設定します。

サンプルコード

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());
//...
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JTableのソート状態を表すRowSorter.SortKeyを永続化するため、以下のような設定を行っています。

  • RowSorter.SortKeyクラスのコンストラクタの引数をプロパティ名としてDefaultPersistenceDelegateを作成
  • RowSorter.SortKeyクラスをXMLで書き出すため、XMLEncoder#setPersistenceDelegate(...)で上記のPersistenceDelegateを設定
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));
    }
  }
}

参考リンク

コメント