JPopupMenuの表示を親コンポーネント領域内のみに制限する
Total: 2633
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JPopupMenu
を設定したコンポーネントの表示領域内に収まるように、JPopupMenu
の表示位置を調整します。
Screenshot
Advertisement
サンプルコード
JPopupMenu popup = new JPopupMenu() {
@Override public void show(Component c, int x, int y) {
if (check.isSelected()) {
Point p = new Point(x, y);
Rectangle r = c.getBounds();
Dimension d = getPreferredSize();
if (p.x + d.width > r.width) {
p.x -= d.width;
}
if (p.y + d.height > r.height) {
p.y -= d.height;
}
super.show(c, Math.max(p.x, 0), Math.max(p.y, 0));
} else {
super.show(c, x, y);
}
}
};
popup.add("JMenuItem: 11111");
popup.add("JMenuItem: 222");
popup.add("JMenuItem: 3");
JLabel label = new JLabel("JLabel: 1234567890");
label.setOpaque(true);
label.setComponentPopupMenu(popup);
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JPopupMenu#show(...)
メソッドをオーバーライドし、JPopupMenu
の表示位置を調整することでコンポーネント(この場合JLabel
)の表示領域内にJPopupMenu
全体が収まるように設定しています。
- 親コンポーネントの右下で右クリックによる
JPopupMenu
の表示を行った場合、そのクリック位置にJPopupMenu
の右下隅が重なるように表示 JPopupMenu
のサイズが親コンポーネントの表示上のサイズより大きくなる場合は考慮していないJPopupMenu
の高さが親コンポーネントの高さより高い場合、クリックした位置とは無関係にJPopupMenu
の上辺が親コンポーネントの上辺と同じ位置になるよう表示