От JFrame до JPanel в Netbeans - PullRequest
       4

От JFrame до JPanel в Netbeans

5 голосов
/ 02 декабря 2010

Я переосмысливаю дизайн моего GUI. Я разработал несколько JFrame с автоматизированным графическим интерфейсом Netbeans (да, я ленив, и этот сгенерированный код часто ужасен, я знаю!), Но теперь я хочу, чтобы они были JPanel (на самом деле, чтобы наследовать от другого класса, который наследует JPanel) , Но я изменил setDefaultCloseOperation, поэтому мой код не работает: setDefaultCloseOperation для JPanel невозможно. Поскольку я не могу изменить сгенерированный код, мне было интересно: есть ли способ заставить Netbeans понять, что я передумал и восстановить код?

Ответы [ 8 ]

5 голосов
/ 02 декабря 2010

Когда я сталкиваюсь с этим (я делал то же самое раньше), мне обычно приходится изменять XML-файл сгенерированного кода (файл .form) или просто копировать все элементы управления, которые я добавил, и вставлять вновый JPanel.Только мои 0,02 доллара, но будьте осторожны, это может сломать ваш код ...

3 голосов
/ 02 декабря 2010

IMHO, nb не будет управлять автоматическим рефакторингом в этом случае; проще добавить новую панель и скопировать и вставить все элементы из вашего старого JFrame (их методы также будут скопированы).

2 голосов
/ 09 января 2013

ДО ЭТОГО, закройте файл в 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.Просто нажмите «Правка», а затем измените одно значение в вашем графическом интерфейсе, это заставит его пересоздать сгенерированный код, и таким образом удалит свойства, которые не применимы.

Теперь это должно быть исправлено для вас.. Надеюсь, это немного помогло!

'Ура!

1 голос
/ 02 декабря 2010

Вы можете заглянуть в Team > Local History, чтобы узнать, сможете ли вы вернуться.

0 голосов
/ 21 марта 2013

У меня была такая же проблема, и оказалось, что решение было довольно простым.

  1. Как уже говорили другие, сделайте резервную копию вашего файла.
  2. Откройте свой класс JFrame и отредактируйте его, чтобы расширить JPanel, а не JFrame.
  3. Вырежьте метод main и поместите его в другой класс.
  4. Закройте ваш проект netbeans и IDE netbeans
  5. Откройте файл .form в текстовом редакторе, который находится в папке src, и измените первую строку следующим образом:

    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. и он будет работать нормально.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 03 декабря 2010

Да, вы можете просто скопировать и вставить его в JPanel.Убедитесь, что ваш размер JPanel должен быть больше или равен существующему размеру контейнера JFrame.:)

0 голосов
/ 03 декабря 2010

Теперь я не знаю, что вы сломали, но я могу вам сказать следующее: вы не можете сказать Netbeans изменить его собственный сгенерированный код так, как вы его описали.

Вы можете попробовать следующее (обязательно сделайте резервную копию раньше):

  1. Откройте YourPanel.java в каком-то редакторе
  2. Удалите строку с помощью setDefaultCloseOperation...,
  3. Заменить все getContentPane() на this
  4. Удалить pack(); в последней строке.
  5. Открыть YourPanel.form в некотором редакторе
  6. Удалитьузел <Properties> (и все внутри)
  7. Удалить узел <SyntheticProperties>.
  8. В корневом узле перейдите с <Form ... type="...JPanelFormInfo"> на <Form ... type="...JFrameFormInfo">

Насколько я заметил, все в файле форм может быть удалено, кроме материала в <Layout>.

Удачи.

0 голосов
/ 02 декабря 2010

Разве вы не можете просто удалить setDefaultCloseOperation () и любые другие вызовы методов, которых больше нет в суперклассе? Делать этот вызов определенно не имеет смысла, поскольку этот класс не является JFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...