JFileChooserのDetails Viewで行全体を選択可能にする
Total: 1436
, Today: 3
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JFileChooser
の詳細表示を行うJTable
で行全体の選択状態表示とマウスによる行選択を可能に変更します。
Screenshot
Advertisement
サンプルコード
String key = "FileView.fullRowSelection";
System.out.println(UIManager.getLookAndFeelDefaults().getBoolean(key));
JCheckBox check = new JCheckBox(key) {
@Override public void updateUI() {
super.updateUI();
setSelected(UIManager.getLookAndFeelDefaults().getBoolean(key));
}
};
JButton button = new JButton("open");
button.addActionListener(e -> {
Boolean flg = check.isSelected();
UIManager.put("FileView.fullRowSelection", flg);
JFileChooser chooser = new JFileChooser();
// https://ateraimemo.com/Swing/DetailsViewFileChooser.html
Optional.ofNullable(chooser.getActionMap().get("viewTypeDetails"))
.ifPresent(a -> a.actionPerformed(new ActionEvent(
e.getSource(), e.getID(), "viewTypeDetails")));
stream(chooser)
.filter(JTable.class::isInstance).map(JTable.class::cast)
.findFirst()
.ifPresent(t -> t.putClientProperty("Table.isFileList", !flg));
int retValue = chooser.showOpenDialog(getRootPane());
if (retValue == JFileChooser.APPROVE_OPTION) {
log.setText(chooser.getSelectedFile().getAbsolutePath());
}
});
View in GitHub: Java, Kotlin解説
FileView.fullRowSelection
:false
WindowsLookAndFeel
のデフォルト- 詳細表示(
Details View
)用のJTable
でファイル名を表示する0
列目のセルの文字列部分のみマウスクリックに反応して選択可能 - 選択状態表示もファイル名のみ
FileView.fullRowSelection
:true
NimbusLookAndFeel
のデフォルト- 詳細表示(
Details View
)用のJTable
で行全体に選択状態が表示される - デフォルトでは
FileView.fullRowSelection
の設定にかかわらずJTable#putClientProperty("Table.isFileList", Boolean.TRUE)
が設定されているためファイル名を表示する0
列目のセルの文字列部分のみマウスクリックに反応する - 上記のサンプルでは
FileView.fullRowSelection
がtrue
の場合はJTable#putClientProperty("Table.isFileList", Boolean.FALSE)
を設定して行全体でマウスクリックによる選択を可能に変更している