概要

JFileChooserの詳細表示で使用するJTableが初期状態でソートする列を指定します。

サンプルコード

private JFileChooser makeFileChooser() {
  return new JFileChooser() {
    private transient AncestorListener handler = null;

    @Override public void updateUI() {
      removeAncestorListener(handler);
      super.updateUI();
      handler = new AncestorListener() {
        @Override public void ancestorAdded(AncestorEvent e) {
          JFileChooser fc = (JFileChooser) e.getComponent();
          SwingUtils.setViewTypeDetails(fc);
          SwingUtils.descendants(fc)
              .filter(JTable.class::isInstance)
              .map(JTable.class::cast)
              .findFirst()
              .ifPresent(table -> {
                List<?> sortKeys = table.getRowSorter().getSortKeys();
                int col = model.getNumber().intValue();
                if (col < 0) {
                  table.getRowSorter().setSortKeys(Collections.emptyList());
                } else if (sortKeys.isEmpty() && col < table.getColumnCount()) {
                  SortOrder order = combo.getItemAt(combo.getSelectedIndex());
                  RowSorter.SortKey key = new RowSorter.SortKey(col, order);
                  table.getRowSorter().setSortKeys(Collections.singletonList(key));
                }
              });
        }
        // ...
      };
      addAncestorListener(handler);
    }
  };
}
View in GitHub: Java, Kotlin

解説

参考リンク

コメント