【发布时间】:2018-03-09 22:34:18
【问题描述】:
我想创建一个 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"...
}
但是要让它起作用,我必须重写一大堆方法并将它们委托给“realPanel”。有没有比让 MyJPanel 实现几十个方法更简单/更简单的方法,这些方法除了在子面板上调用相同的方法之外什么都不做?
【问题讨论】:
-
哇——简化,简化。为什么不通过 M-V-C 从 GUI 中提取所有逻辑,让您的生活(和您的代码)更简单、更易于管理?
-
请问这个的最终目标是什么? :) 如果您更喜欢改进按钮的外观(例如添加“徽章”覆盖),官方解决方案是实现自定义按钮 LAF。一个更简单的解决方案是重写按钮的paintComponent方法来绘制你想要的任何东西。
-
抱歉没有具体说明。我的目标是在选项卡行空间的右上角(假设选项卡在顶部)创建一个带有内置“帮助”按钮的 JTabbedPane。理想情况下,它会扩展 JTabbedPane,但我不知道如何在不必手动绘制按钮并处理其点击事件的情况下做到这一点。所以我选择了一个“外部”JPanel 容器,里面有一个 JTabbedPane 和一个 JButton(通过 OverlayLayout 布局),并将所有布局/添加/删除操作转发到包含的 JTabbedPane。
标签: java swing methods jpanel delegation