带有内部组件的java单击JPanel
我有一个主JPanel
类(不是确切的代码):
class Panel extends JPanel {
public void initGUI() {
setLayout(...);
JTabbedPane tabbedPane = new JTabbedPane();
JPanel boxPanel = new JPanel(...);
tabbedPane.addTab("test", boxPanel);
JLabel label = new JLabel("Label")
boxPanel.add(label);
add(tabbedPane);
}
}
我希望能够点击面板或其内部组件上的任何位置,然后返回面板
public class PanelMouseAdapter extends MouseAdapter {
public void mouseReleased(MouseEvent e) {
Panel panel = (Panel)e.getSource();
//do other stuff
}
}
对于每个面板,我都添加了这个鼠标侦听器
但它只在面板边缘起作用,任何内部组件都被忽略。我需要它能点击面板上的任何地方
我需要保持在我点击它的任何地方都会返回Panel对象(就像在鼠标侦听器中一样)
谢谢你的反馈
# 1 楼答案
我不太明白这个问题。您的演示代码只显示一个面板,那么您为什么关心单击哪个父面板呢?你对需求的解释越好,我们就能提供更好的解决方案
无论如何,看看Global Event Listeners。这将允许您监听鼠标按下的事件(这比监听鼠标按下的事件更好)
接下来,您需要创建一个用于顶层面板的自定义面板(MyCustomPanel)
现在,无论何时生成mousePressed,您都可以获取事件源,然后使用:
# 2 楼答案
解决了这个问题
最初,我打算在鼠标侦听器就位后打开一个弹出菜单
但现在我添加了JComponent。按照Polum的建议设置ComponentPopupMenu,而不是面板,而是选项卡窗格
然后我在弹出菜单中添加了一个监听器,通过popupMenuWillBecomeVisible方法中的事件获取源对象,然后通过源获取组件。getInvoker(),然后获取invoker组件的父级,并检查它是否是PairBox的实例