如标题中所示,我有一个带有两个或更多子JPanel组件的JPanel,我想将鼠标事件传播给所有子组件。比方说我有一个moused拖动事件,它在一个子JPanel对象中绘制一个矩形。我想让其他JPanel的孩子以同步的方式画出同样的东西。
第一个遇到的问题是,通常只有位于鼠标事件“下方”的最顶层组件才会收到对大多数应用程序有意义的特定鼠标事件的通知。通过放弃通常使用的MouseListener路径并使用enableEvents()启用各种鼠标事件然后重写processMouseEvent()和processMouseMotionMotionEvent()以使每个函数分配鼠标事件(修改后),我(非常接近)得到了我正在寻找的行为。从父坐标坐标到每个子JPanel来绘制必要的。但是,我不确定我选择的路线是否最好,并希望就此事提出更多意见。
我希望实现的另一种方法是覆盖dispatchEvent(AWTEvent e)方法,并通过在每个子面板上调用dispatchEvent将事件分派给每个子面板,但遗憾的是dispatchEvent(AWTEvent e)不可覆盖。
非常感谢任何一般性的帮助。
答案 0 :(得分:1)
将输入代码与应绘制代码的内容分开。
让面板共享一个模型,告诉他们应该画什么。在MouseListener中(或基于其他输入)将需要绘制的内容添加到模型中,然后可以通知面板重新绘制自己。