• category: swing folder: ColumnModelPersistence title: TableColumnModelをXMLファイルで保存、復元する tags: [JTable, JTableHeader, TableColumnModel, XMLEncoder, XMLDecoder] author: aterai pubdate: 2015-12-14T02:58:18+09:00 description: JTableのヘッダからTableColumnModelを取得し、XMLEncoderとXMLDecoderを使って、XMLファイルで保存、復元します。 image: https://lh3.googleusercontent.com/-3ZhmTqRFkgU/Vm2uUZ4_gCI/AAAAAAAAOI4/bY9IRX-guT4/s800-Ic42/ColumnModelPersistence.png hreflang:
       href: https://java-swing-tips.blogspot.com/2016/01/save-and-load-state-of-jtable-and.html
       lang: en

概要

JTableのヘッダからTableColumnModelを取得し、XMLEncoderXMLDecoderを使って、XMLファイルで保存、復元します。

サンプルコード

class TableColumnModelPersistenceDelegate 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));
    }
  }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JTableHeaderからTableColumnModelを取得し、XMLEncoderXMLファイルに保存、XMLDecoderで復元することで、マウスドラッグによる列の入れ替え、幅の変更、JPopupMenu(右クリックなど)を開いての名前変更などを永続化することができます。

参考リンク

コメント