我有一个组件(Widget - 扩展了 JPanel),我在该组件上实现了一个简单的弹出菜单。它在单击面板的边框时起作用,基本上除了面板布局在面板内包含其他一些组件的地方之外的所有地方。
因此,如果面板内有一个 JTable,我可以在单击它旁边时调用菜单(如果没有其他内容),但是当单击 JTable 时,什么也没有发生(该表显然位于面板顶部,阻止了 MouseAdapter注册点击)。
我可以在右键单击面板内的组件时以某种方式调用弹出菜单吗?这是我如何创建和调用菜单的示例代码:
private void initPopupMenu() {
popup = new JPopupMenu();
JMenuItem closeItem = new JMenuItem("Close");
closeItem.setActionCommand(WidgetConstants.Actions.CLOSE.name());
closeItem.addActionListener(this);
popup.add(closeItem);
JMenuItem minimizeItem = new JMenuItem("Minimize");
minimizeItem.setActionCommand(WidgetConstants.Actions.MINIMIZE.name());
minimizeItem.addActionListener(this);
popup.add(minimizeItem);
}
MouseInputListener componentListener = new MouseInputAdapter() {
@Override
public void mousePressed(MouseEvent me) {
// popup
if (me.isPopupTrigger()) {
popup.show(me.getComponent(), me.getX(), me.getY());
}
}
@Override
public void mouseReleased(MouseEvent ev) {
if (ev.isPopupTrigger()) {
popup.show(ev.getComponent(), ev.getX(), ev.getY());
}
}
}
@Override
public void setBorder(Border border) {
removeMouseListener(componentListener);
removeMouseMotionListener(componentListener);
if (border instanceof WidgetBorder) {
addMouseListener(componentListener);
addMouseMotionListener(componentListener);
}
super.setBorder(border);
}
谢谢你的任何提示。