Как удалить макет из JPanel с помощью NetBeans? - PullRequest
4 голосов
/ 01 января 2011

Я использую MainWindow (JFrame) с JPanel, используя простой CardLayout, CardLayout заполнен несколькими JPanels.

Работает нормально, если я перетаскиваю JPanels из палитры в CardLayout, а затем помещаю содержимое на панели. Однако я хочу разместить различные JPanel в отдельных файлах, поэтому я создал несколько форм JPanel с NetBeans.

Проблема only , с которой я столкнулся сейчас, когда я помещаю свой производный класс JPanel в CardLayout (например, используя функцию «Выбрать компонент» из NetBeans), NetBeans всегда устанавливает новый макет для панели, поэтому моя оригинальный макет из класса JPanel переопределяется, и все, что я получаю, это пустой JPanel.

Так кто-нибудь знает, есть ли способ просто удалить макет из моих классов JPanel? Я имею в виду, что я не могу установить Layout на «None» или что-то с NetBeans, если я установлю его на «Null Layout», он все равно вызывает «jPanel.setLayout (null);» конечно, но я просто не хочу вызывать setLayout, разве это не возможно как-то?

И извините, если я просто глуп, чтобы найти решение здесь. Я совсем новичок в NetBeans, но должен быть способ вручную изменить код, я не могу просто использовать опцию «Customize Code», потому что там написано «// Код подкомпонентов и макет - здесь не показан» ...

Надеюсь, кто-нибудь понимает, в чем моя проблема. :)

Ответы [ 4 ]

1 голос
/ 08 марта 2011

Скорее раздражает, не так ли?Вы можете кодировать его следующим образом ...

После того, как ваш производный класс JPanel вызывает initComponent() в своем конструкторе, он может отключить любые дальнейшие вызовы setLayout(), скажем, setAllowLayoutChange(false);.

Поместите следующий код в общий базовый класс, производный от JPanel:

protected boolean mAllowLayoutChange;

/** Creates new form CommonPanel */
public CommonPanel()
{
    super();
    mAllowLayoutChange=true;
}

public void setAllowLayoutChange(boolean b)
{
    mAllowLayoutChange=b;
}

@Override
public void setLayout(LayoutManager mgr)
{
    if(mAllowLayoutChange) super.setLayout(mgr);
}
1 голос
/ 01 января 2011

Это одна из основных причин не использовать GUI Builder.Вы должны быть в состоянии получить доступ к коду кого-то в Netbeans, однако я предлагаю перезапустить графический интерфейс вручную.Это даст вам больше гибкости, и вы лучше поймете, что делаете.

0 голосов
/ 21 октября 2017

Просто установите его в макет по умолчанию - это не позволяет генератору кода делать что-либо. Обратите внимание, Netbeans вызывает этот Default / FlowLayout, но на самом деле он просто ничего не делает ...

0 голосов
/ 04 сентября 2016

У меня была такая же проблема, и я потерял много времени на нее. Я не мог видеть ни одного JLabel, добавленного к расширенному классу.

Я думаю, что это невероятный недостаток в конструкторе Netbeans, все из-за глупо сгенерированного и необратимого Panel1.setLayout (new ...

Решено с помощью дополнения к предыдущему ответу. В основном блокировка класса setLayout после initComponents.

protected boolean mAllowLayoutChange=true;

/** Creates new form CommonPanel */
public CommonPanel()
{
    initComponents();
    //no more layout changes allowed
    mAllowLayoutChange=false;
}

@Override
public void setLayout(LayoutManager mgr)
{
    if(mAllowLayoutChange) super.setLayout(mgr);
}
...