Swing/FileViewFullRowSelection のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/FileViewFullRowSelection へ行く。
- 1 (2020-05-04 (月) 17:58:40)
- 2 (2021-11-02 (火) 02:30:37)
- 3 (2023-07-18 (火) 14:23:53)
- category: swing folder: FileViewFullRowSelection title: JFileChooserのDetails Viewで行全体を選択可能にする tags: [JFileChooser, JTable, UIManager, LookAndFeel] author: aterai pubdate: 2020-05-04T17:55:19+09:00 description: JFileChooserの詳細表示を行うJTableで行全体の選択状態表示とマウスによる行選択を可能に変更します。 image: https://drive.google.com/uc?id=1Kmm_cFFBn4Ox_HtiEZwK3-cmZbWG7BkD
概要
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")));
// https://ateraimemo.com/Swing/GetComponentsRecursively.html
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)
を設定して行全体でマウスクリックによる選択を可能に変更している