簡體   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