TableColumnのリサイズ中にその幅をJToolTipで表示する
Total: 1921
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
TableColumn
をマウスでリサイズ中の場合、その幅をJWindow
に配置したJToolTip
で表示します。
Screenshot
Advertisement
サンプルコード
class ColumnWidthResizeHandler extends MouseInputAdapter {
private final JWindow window = new JWindow();
private final JToolTip tip = new JToolTip();
private String prev = "";
private Point getToolTipLocation(MouseEvent e) {
Point p = e.getPoint();
Component c = e.getComponent();
SwingUtilities.convertPointToScreen(p, c);
p.translate(0, -tip.getPreferredSize().height);
return p;
}
private static TableColumn getResizingColumn(MouseEvent e) {
Component c = e.getComponent();
if (c instanceof JTableHeader) {
return ((JTableHeader) c).getResizingColumn();
}
return null;
}
private void updateTooltipText(MouseEvent e) {
TableColumn column = getResizingColumn(e);
if (column != null) {
String txt = String.format("Width: %dpx", column.getWidth());
tip.setTipText(txt);
if (prev.length() != txt.length()) {
window.pack();
}
window.setLocation(getToolTipLocation(e));
prev = txt;
}
}
@Override public void mouseDragged(MouseEvent e) {
if (!window.isVisible() && getResizingColumn(e) != null) {
window.add(tip);
window.setAlwaysOnTop(true);
window.setVisible(true);
}
updateTooltipText(e);
}
@Override public void mouseReleased(MouseEvent e) {
window.setVisible(false);
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、TableColumn
のマウスによるリサイズイベントを取得してその列幅をJToolTip
で表示しています。
JTable#getColumnModel()#addColumnModelListener(...)
- TableColumnModelListenerでは列の追加、削除、移動イベントは取得可能だが列幅のリサイズイベントは取得不可
JTable#getTableHeader()#addPropertyChangeListener(...)
JTableHeader
にPropertyChangeListener
を追加し、JTableHeader#getResizingColumn()
メソッドでリサイズ状態のColumnModel
を取得可能だがリサイズ終了イベントが取得できない
JTable#getTableHeader()#addMouseListener(...)
、JTable#getTableHeader()#addMouseMotionListener()
MouseListener
とJTableHeader#getResizingColumn()
メソッドを合わせて使用し、ColumnModel
リサイズの開始終了を取得MouseMotionListener
を使用して列幅のリサイズ中はColumnModel#getWidth()
メソッドで取得したColumnModel
の幅をJToolTip
で表示JToolTip
のデフォルトウィンドウは使用せず別途用意したJWindow
にJToolTip
を追加し、そのJWindow
で表示・非表示や位置の更新を操作