我想创建一个JPanel,它覆盖右上角的按钮,但其他行为与任何其他JPanel一样。我能提出的唯一解决方案是:
public class MyJPanel extends JPanel {
private final JPanel realPanel = new JPanel();
private final Button button = new JButton();
public MyJPanel() {
super(new OverlayLayout());
...layout the realPanel and the button on top of it...
}
... implement all public JPanel methods and delegate to "realPanel"...
}
但为了实现这一点,我必须覆盖一大堆方法并将它们委托给#34; realPanel"。有没有一种简单/容易的方法,让MyJPanel实现几十种方法,除了在子面板上调用相同的方法之外什么都不做?
答案 0 :(得分:0)
Swing鼠标事件经过测试并转发到鼠标下方的组件。你需要:
实现那些监听器(哦,并且还转换相对于最顶层面板的鼠标事件坐标)
而不是使用面板,通过自定义其绘画来装饰按钮(例如覆盖paintComponent
,或实现自定义LAF)。在这种情况下,自定义仍然是相同的组件,因此该按钮将接收所有鼠标事件。
PS:解释为什么你希望实现目标总是一个好主意,而不是仅仅推动实现某个解决方案。如果能够理解真正的问题,还有更多的解决方案。