繁体   English   中英

从JFrame到Netbeans中的JPanel

[英]From JFrame to JPanel in Netbeans

我正在重新思考GUI的设计。 我用Netbeans自动GUI设计了一些JFrame(是的,我很懒,这个生成的代码通常很糟糕,我知道!),但现在我希望它们是JPanel(实际上,从继承JPanel的另一个类继承) 。 但是我修改了“setDefaultCloseOperation”,所以我的代码被破坏了:对于JPanel来说,setDefaultCloseOperation是不可能的。 由于我无法修改生成的代码,我想知道:有没有办法让Netbeans明白我改变主意,重新生成代码?

当我遇到这个问题时(我以前做过同样的事情)我通常最终必须修改生成的代码XML文件(.form文件)或者只是复制我添加的所有控件并粘贴到新的JPanel中。 只需我0.02美元,但要注意这可能会破坏你的代码......

恕我直言,在这种情况下,nb不会管理自动重构; 添加新面板并复制粘贴旧JFrame中的所有元素会更容易(他们的方法也会被复制)。

在执行此操作之前,请关闭Netbeans中的文件并备份您要编辑的.java和.form文件。

我刚刚遇到这个问题,并通过更改.form文件来修复它,该文件随后是您给定类型的.java文件。 在此XML文件的顶部,您将看到:

<Form version="1.3" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">

只需将其更改为:

<Form version="1.3" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">

请注意,我刚刚更改了这一部分:

type="org.netbeans.modules.form.forminfo.JPanelFormInfo"

完成此操作后,在netbeans中重新打开文件,它现在会告诉您存在错误,这是因为您可能设置了一些属性,这些属性不适用于JPanel,但适用于JFrame。 只需点击编辑,然后在GUI中更改一个值,这将强制它重建生成的代码,这样它将删除不适用的属性。

现在应该为你修好..我希望这有点帮助!

'干杯!

您可以查看“ Team > Local History以查看是否可以还原。

我遇到了同样的问题,事实证明解决方案非常简单。

  1. 正如其他人所说,备份你的文件。
  2. 打开JFrame类并对其进行编辑以扩展JPanel而不是JFrame。
  3. 剪切主方法方法并将其放入另一个类中。
  4. 关闭netbeans项目和netbeans IDE
  5. 在位于src文件夹中的文本编辑器中打开.form文件,并从中更改第一行:

    Form =“1.5”maxVersion =“1.8”type =“org.netbeans.modules.form.forminfo.JFrameFormInfo”

对此:

Form="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"
  1. 保存完之后。 再次打开netbeans项目。(它将打开并显示错误)
  2. 修改JPanel的其中一个属性。
  3. 运行程序。 Netbeans将自动删除仅与JFrame关联的所有方法。 它会运行正常。

希望有人帮助!

你不能只删除setDefaultCloseOperation()以及对超类中不再存在的方法的任何其他调用吗? 由于该类不是JFrame,因此进行此调用绝对没有意义。

我现在不知道你打破了什么,但我可以告诉你:你不能告诉Netbeans以你描述的方式改变他自己生成的代码。

您可以尝试以下操作(请务必先进行备份):

  1. 在某些编辑器中打开YourPanel.java
  2. 使用setDefaultCloseOperation...删除该行setDefaultCloseOperation...
  3. this替换所有getContentPane()
  4. 删除pack(); 在最后一行。
  5. 在某些编辑器中打开YourPanel.form
  6. 删除节点<Properties> (及其中的所有内容)
  7. 删除节点<SyntheticProperties>
  8. 在根节点中从<Form ... type="...JPanelFormInfo">更改为<Form ... type="...JFrameFormInfo">

据我观察,除了<Layout>的内容之外,可以删除表单文件中的所有内容。

祝好运。

是的,您只需将其复制并粘贴到JPanel即可。 确保JPanel大小必须大于或等于现有JFrame容器大小。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM