Java中的可视化继承

Java中的可视化继承,java,swing,ide,netbeans,visual-inheritance,Java,Swing,Ide,Netbeans,Visual Inheritance,我所在的团队在Java平台中的表单可视化继承方面一直存在问题 我们希望开发一个包含一些控件的基本JFrame,并从该基本JFrame继承表单。Netbeans 6.1的设计者没有在继承的控件中绘制基窗体的控件,因此我们不能以我们想要的方式使用它。在执行时,继承的表单被很好地绘制,并带有父控件 Netbeans设计器 有人解决了吗?我们是否应该更改IDE?只是一个一般性的评论,而不是对您的情况的真正回答-可视化组件不是为继承而设计的。例如,看到Sun从组件继承了所有内容,犯了一个可怕的错误-现在您

我所在的团队在Java平台中的表单可视化继承方面一直存在问题

我们希望开发一个包含一些控件的基本JFrame,并从该基本JFrame继承表单。Netbeans 6.1的设计者没有在继承的控件中绘制基窗体的控件,因此我们不能以我们想要的方式使用它。在执行时,继承的表单被很好地绘制,并带有父控件

Netbeans设计器


有人解决了吗?我们是否应该更改IDE?

只是一个一般性的评论,而不是对您的情况的真正回答-可视化组件不是为继承而设计的。例如,看到Sun从组件继承了所有内容,犯了一个可怕的错误-现在您有了一个JList,无法使用.add()向其添加项目。除非你能完成整个超类契约(我只知道有几个类可以),否则你更喜欢组合而不是继承。公开您计划实现的方法和一个“Component getAsComponent()”方法,该方法带有不应直接更改组件的显式声明。我发现这比思考“如果有人使用add(JLabel)到我的组件或setLayout(),我应该怎么做”要容易得多


关于您的具体困境-我在IntelliJ IDEA中使用JFormDesigner,但它也可能适用。JFD有一种很好的方法来使用组件BeanInfo信息(对于名为“MyThingy”的组件,信息类将是“MyThingyBeanInfo”)。使用该类,您可以定义许多仅用于设计时的内容,以及特殊的绘画方法和其他细节。

好吧,Matisse并不是专门为创建固有形式而设计的。它是为合成而设计的(即创建一个自定义JComponent并将其放入您的Matisse表单中)

表单设计器不使用java文件创建表单,而是使用“表单”文件。这不是天生的。如果您确实需要使用继承(我建议您不要使用继承),那么您需要将“表单”文件的内容复制到您的子类中

通常,您应该创建某种自定义JPanel(使用或不使用Matisse),然后将此表单放入JFrame中。任何需要重用的自定义代码/事件都应该附加到JFrame,并在bean中创建,然后添加到表单中


NetBeans7正在考虑修改Matisse的代码生成。我建议将此作为增强请求放入。

Jaguard,您必须更改访问变量控制(右键单击控制,选择“自定义代码”,查看窗口底部)