Java Swing JPanel:如何将所有方法调用转发给子JPanel?

时间:2018-03-09 22:34:19

标签: java swing methods jpanel delegation

我想创建一个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实现几十种方法,除了在子面板上调用相同的方法之外什么都不做?

1 个答案:

答案 0 :(得分:0)

Swing鼠标事件经过测试并转发到鼠标下方的组件。你需要:

  1. 实现那些监听器(哦,并且还转换相对于最顶层面板的鼠标事件坐标)

  2. 而不是使用面板,通过自定义其绘画来装饰按钮(例如覆盖paintComponent,或实现自定义LAF)。在这种情况下,自定义仍然是相同的组件,因此该按钮将接收所有鼠标事件。

  3. PS:解释为什么你希望实现目标总是一个好主意,而不是仅仅推动实现某个解决方案。如果能够理解真正的问题,还有更多的解决方案。