我工作的团队在 Java 平台中表单的可视继承方面遇到了问题。
我们希望开发一个包含一些控件的基本 JFrame,并从该基本 JFrame 继承表单。Netbeans 6.1 的设计者不会在继承的控件中绘制基本窗体的控件,因此我们不能以我们想要的方式使用它。在执行时,继承的表单被很好地绘制,带有父控件。
Netbeans 设计师
有人解决了吗?我们应该改变IDE吗?
我工作的团队在 Java 平台中表单的可视继承方面遇到了问题。
我们希望开发一个包含一些控件的基本 JFrame,并从该基本 JFrame 继承表单。Netbeans 6.1 的设计者不会在继承的控件中绘制基本窗体的控件,因此我们不能以我们想要的方式使用它。在执行时,继承的表单被很好地绘制,带有父控件。
Netbeans 设计师
有人解决了吗?我们应该改变IDE吗?
AFAIK,马蒂斯并不是真的设计来创造继承的形式。它是为组合而设计的(即创建一个自定义的 JComponent 并将其放入您的 Matisse 表单中)。
表单设计器不使用 java 文件来创建表单,它使用“表单”文件。这不会被继承。如果您绝对需要使用继承(我不建议这样做),那么您需要将“表单”文件的内容复制到您的子类中。
通常,您应该创建某种类型的自定义 JPanel(使用或不使用 Matisse),然后将此表单放入您的 JFrame。任何需要重用的自定义代码/事件都应该附加到 JFrame 中,应该在 bean 中创建,然后添加到表单中。
Netbeans 7 正在考虑改进 Matisse 的代码生成。我建议将此作为增强请求放在www.netbeans.org 上。
只是一般性评论,而不是对您的情况的真正答案 - 视觉组件不是为了继承而制作的。例如,查看 Sun 通过从 Component 继承所有内容所犯的可怕错误 - 现在您有一个无法使用 .add() 向其中添加项目的 JList。除非您可以履行整个超类契约(我只知道几个可以)更喜欢组合而不是继承。公开您计划实现的方法和“组件 getAsComponent()”方法,并明确声明不应直接更改组件。我发现这比思考“如果有人在我的组件中使用 add(JLabel) 或 setLayout() 该怎么办?”要容易得多。
关于您的具体困境 - 我在 IntelliJ IDEA 中使用 JFormDesigner,但它也可能适用。JFD 有一种使用组件 BeanInfo 信息的好方法(对于名为“MyThingy”的组件,信息类将是“MyThingyBeanInfo”)。使用该类,您可以定义许多仅在设计时使用的东西,以及特殊的绘画方法和其他细节。
Jaguard,你必须更改访问var控件(右键单击控件,选择'customize code',见窗口底部)