JToolBarのドッキングを上下のみに制限
Total: 9124
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JToolBar
のドッキングを上下のみに制限して、左右を無視するように設定します。
Screenshot
Advertisement
サンプルコード
toolbar.setUI(new BasicToolBarUI() {
@Override public boolean canDock(Component c, Point p) {
return super.canDock(c, p) ? isHorizontalDockingConstraint(c, p) : false;
}
private boolean isHorizontalDockingConstraint(Component c, Point p) {
if (!c.contains(p)) return false;
int iv = toolBar.getOrientation() == JToolBar.HORIZONTAL
? toolBar.getSize().height
: toolBar.getSize().width;
if (p.x >= c.getWidth() - iv) {
return false;
} else if (p.x < iv) {
return false;
} else {
return true;
}
}
});
View in GitHub: Java, Kotlin解説
ToolBarUI#canDock(Component, Point)
メソッドをオーバーライドして左右の場合はfalse
を返すよう設定- このため
JToolBar
は上下にのみドッキング可能になるよう制限され、横長のJComboBox
などのコンポーネントを配置したJToolBar
が左右に配置されてレイアウトが崩れる心配がない
- このため
- ドッキングできるかどうかを判定している
BasicToolBarUI#getDockingConstraint
メソッドがprivate
のため、サンプルコードではこれをコピーしてすこしだけ条件を変更したisHorizontalDockingConstraint
メソッドを作成して使用 BorderLayout
のWEST
とEAST
に、たとえばサイズ0
のBox
や空のJLabel
などの適当な非表示コンポーネントを配置するとLookAndFeel
の変更なしでドッキングの制限が可能になるJPanel panel = new JPanel(new BorderLayout()); panel.add(toolbar, BorderLayout.NORTH); panel.add(Box.createRigidArea(new Dimension()), BorderLayout.WEST); panel.add(Box.createRigidArea(new Dimension()), BorderLayout.EAST);
参考リンク
BasicToolBarUI#canDock(...) (Java Platform SE 8)