JToolBarのドッキングを上下のみに制限
Total: 9597, Today: 1, Yesterday: 2
Posted by aterai at
Last-modified:
Summary
JToolBarのドッキングを上下のみに制限して、左右を無視するように設定します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
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);
Reference
BasicToolBarUI#canDock(...) (Java Platform SE 8)