Swing/ResizeColumnCursor のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ResizeColumnCursor へ行く。
- 1 (2021-07-19 (月) 02:43:20)
- category: swing folder: ResizeColumnCursor title: JSplitPaneやTableColumnのリサイズカーソルを変更する tags: [JSplitPane, Divider, JTable, JTableHeader, TableColumn, Cursor] author: aterai pubdate: 2021-07-19T02:41:03+09:00 description: JSplitPaneのDividerやJTableHeaderのTableColumnをリサイズ中に表示されるマウスカーソルを変更します。 image: https://drive.google.com/uc?id=16YsnRoba4Fln-RrWN_rd1V_81Hiw3q4l
概要
JSplitPaneのDividerやJTableHeaderのTableColumnをリサイズ中に表示されるマウスカーソルを変更します。
Screenshot
Advertisement
サンプルコード
JSplitPane sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
BasicSplitPaneDivider divider = ((BasicSplitPaneUI) sp2.getUI()).getDivider();
divider.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
JSplitPane sp3 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT) {
@Override public void updateUI() {
super.updateUI();
EventQueue.invokeLater(() -> {
BasicSplitPaneDivider d = ((BasicSplitPaneUI) getUI()).getDivider();
d.setCursor(ResizeCursorUtils.createCursor("⇹", 32, 32, d));
});
}
};
View in GitHub: Java, Kotlin解説
- 上:
JSplitPane
- デフォルトは左右分割の場合
Cursor.E_RESIZE_CURSOR
、上下分割の場合Cursor.S_RESIZE_CURSOR
を使用するようBasicSplitPaneDivider
でハードコーディングされている Ubuntu
環境のCursor.E_RESIZE_CURSOR
はホットスポットがカーソルの中央ではなく左端に存在するため、左右分割のDivider
上にカーソルを置くと左コンポーネント上にカーソルがジャンプ?してしまう
- デフォルトは左右分割の場合
- 中:
JSplitPane
- 左右分割
Divider
のカーソルをUbuntu
環境ではホットスポットが右端に存在するCursor.W_RESIZE_CURSOR
に変更- Splitter.java - IntelliJ IDEA Community Editionのリサイズカーソルも左右分割なら
Cursor.E_RESIZE_CURSOR
、上下分割ならCursor.N_RESIZE_CURSOR
を使用している
- Splitter.java - IntelliJ IDEA Community Editionのリサイズカーソルも左右分割なら
Windows
環境ではCursor.E_RESIZE_CURSOR
、Cursor.W_RESIZE_CURSOR
ともにホットスポットはカーソル中央なので変化なし- このサンプルでは上下分割に切り替えた場合などには未対応
- 左右分割
- 下:
JSplitPane
- ホットスポットを文字
⇹
の中央に設定したカスタムカーソルを作成してリサイズカーソルとしてDivider
に設定 - Cursorオブジェクトの生成
- このサンプルでは上下分割に切り替えた場合などには未対応
- ホットスポットを文字
- 上中:
TableColumn
JSplitPane
と同様にデフォルトは左右分割の場合Cursor.E_RESIZE_CURSOR
、上下分割の場合Cursor.S_RESIZE_CURSOR
を使用するようBasicTableHeaderUI
でハードコーディングされている- リサイズカーソル(
Cursor.E_RESIZE_CURSOR
)表示中にキー入力でLookAndFeel
を切り替えるとJTableHeader
上では常にCursor.E_RESIZE_CURSOR
が表示されてCursor.DEFAULT_CURSOR
に戻せなくなる
- 下:
TableColumn
- ホットスポットを
Excel
風に文字⇼
の中央に設定したカスタムカーソルを作成 BasicTableHeaderUI.MouseInputHandler#mouseMoved(...)
メソッドをオーバーライドしてJTableHeader
で使用
- ホットスポットを