概要

JFileChooserのファイル一覧でファイルの選択状態やポップアップメニューのセパレータなどをWindows風の表示に変更します。

サンプルコード

String key = "FileChooser.listViewWindowsStyle";
JCheckBox check = new JCheckBox("listViewWindowsStyle") {
  @Override public void updateUI() {
    super.updateUI();
    boolean b = UIManager.getLookAndFeelDefaults().getBoolean(key);
    setSelected(b);
  }
};

JButton button = new JButton("show");
button.addActionListener(e -> {
  boolean b = check.isSelected();
  UIManager.put(key, b);
  JFileChooser fileChooser = new JFileChooser();
  int retValue = fileChooser.showOpenDialog(getRootPane());
  if (retValue == JFileChooser.APPROVE_OPTION) {
    log.setText(fileChooser.getSelectedFile().getAbsolutePath());
  }
});
View in GitHub: Java, Kotlin

解説

  • FileChooser.listViewWindowsStyle: Boolean.TRUE
    • スクリーンショット下
    • WindowsLookAndFeelでのデフォルトで、JFileChooserのファイル一覧の選択状態などを以下のようなWindowsスタイル?で表示する
      • WindowsLookAndFeel以外でもUIManager.put("FileChooser.listViewWindowsStyle", Boolean.TRUE)を設定するとWindowsスタイルでの表示が可能になる
    • JListを使用したListViewJTableを使用したDetailsViewでファイルなどを選択し、右クリックなどでポップアップメニューを開くと選択状態の表示がクリアされる
      • デフォルト?のWindows 10のファイル選択ダイアログでは右クリックでポップアップメニューを開いてもファイル選択状態は維持されるので、上記の動作が意図したものかバグなのかは分からない
      • UIManager.put("FileView.fullRowSelection", Boolean.TRUE)が設定されてJTableを使用したDetailsViewの一行選択が有効になっている場合は、選択状態の表示がクリアが無効になる
      • JFileChooserのDetails Viewで行全体を選択可能にする
    • ポップアップメニューにセパレータが追加される
  • FileChooser.listViewWindowsStyle: Boolean.FALSE
    • スクリーンショット上
    • WindowsLookAndFeel以外でのデフォルト
    • JListを使用したListViewJTableを使用したDetailsViewでファイルなどを選択し、右クリックなどでポップアップメニューを開いても選択状態の表示が保持される
    • ポップアップメニューのセパレーターが非表示になる

参考リンク

コメント