JFileChooserのファイル一覧にJToolTipを設定する
Total: 1889
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JFileChooser
の詳細ファイル一覧でファイル名が省略されている場合にJToolTip
でそれを表示します。
Screenshot
Advertisement
サンプルコード
JButton button3 = new JButton("JTable tooltips");
button3.addActionListener(e -> {
JFileChooser chooser = new JFileChooser();
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(MainPanel::setCellRenderer);
int retvalue = chooser.showOpenDialog(log.getRootPane());
if (retvalue == JFileChooser.APPROVE_OPTION) {
log.setText(chooser.getSelectedFile().getAbsolutePath());
}
});
// ...
private static void setCellRenderer(JTable table) {
table.setDefaultRenderer(Object.class, new TooltipTableCellRenderer());
}
// ...
class TooltipTableCellRenderer implements TableCellRenderer {
private final TableCellRenderer renderer = new DefaultTableCellRenderer();
@Override public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
JLabel l = (JLabel) renderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
Insets i = l.getInsets();
Rectangle rect = table.getCellRect(row, column, false);
rect.width -= i.left + i.right;
Optional.ofNullable(l.getIcon()).ifPresent(icon ->
rect.width -= icon.getIconWidth() + l.getIconTextGap());
FontMetrics fm = l.getFontMetrics(l.getFont());
String str = Objects.toString(value, "");
l.setToolTipText(fm.stringWidth(str) > rect.width ? str : null);
return l;
}
}
View in GitHub: Java, Kotlin解説
Default
JFileChooser
のリスト一覧、詳細一覧ともにJToolTip
は設定されていない
JList tooltips
JFileChooser
のリスト一覧(JList
)をすべて検索してJList#setCellRenderer(...)
でJToolTip
を表示するためのListCellRenderer
を設定
JTable tooltips
JFileChooser
の詳細一覧(JTable
)を検索して最初に見つかったJTable
にJTable#setCellRenderer(...)
でJToolTip
を表示するためのTableCellRenderer
を設定- セルが省略されている場合のみ
JToolTip
を表示
参考リンク
- Containerの子Componentを再帰的にすべて取得する
- JFileChooserのデフォルトをDetails Viewに設定
- JTableのセルがクリップされている場合のみJToolTipを表示