Макеты и минимальные размеры - PullRequest
1 голос
/ 05 сентября 2010

Я пытаюсь вставить новую панель с минимальным размером, установленным в существующую форму. К сожалению после того, как я это сделаю:

this.add(scrap);
this.moveScrapCentre(scrap); // runs setLocation(...)
this.revalidate();
this.repaint();

(где this: JPanel с разметкой null, scrap: JPanel с разметкой блока и дочерними элементами)

scrap изменяется до (0,0) - хотя я установил минимальный и предпочтительный размер в редакторе свойств Netbeans. Как я могу предотвратить это, кроме принуждения scrap.setSize(scrap.getPreferredSize())?

1 Ответ

1 голос
/ 05 сентября 2010

"Несмотря на то, что мы настоятельно рекомендуем использовать менеджеры компоновки, вы можете выполнять компоновку без них. Если для свойства макета контейнера задано значение NULL, контейнер не будет использовать диспетчер компоновки. В этой стратегии, называемой абсолютным позиционированием, необходимо указатьразмер и положение каждого компонента в этом контейнере. Одним из недостатков абсолютного позиционирования является то, что он плохо корректируется при изменении размера контейнера верхнего уровня. Он также плохо приспосабливается к различиям между пользователями и системами, например, к разным размерам шрифтов.и локали. "- Настройка диспетчера макетов

Приложение: К сожалению, я неправильно прочитал вопрос.Просто сделайте

this.setPreferredSize(new Dimension(w, h));

, используя желаемые значения w и h.Если this является проставкой, компоновка не должна иметь значения.

Добавление: если посмотреть еще ближе, размер scrap может динамически изменяться.Вы можете переопределить getPreferredSize() соответственно.Поскольку вы используете GUI-конструктор, ваша панель имеет объявление, похожее на следующее:

public class NewJPanel extends javax.swing.JPanel

Вы можете добавить требуемый метод внутри класса, но за пределами сгенерированного кода:

@Override
public Dimension getPreferredSize() {
    return new Dimension(w, h);
}

В сторону: дизайнер GUI - это помощь , которая предполагает понимание лежащего в основе менеджера компоновки.Замечание требует, чтобы вы использовали его для каждой панели, и многие макеты довольно просты .Я часто вижу использование дизайнера зарезервировано для панелей, требующих более сложных макетов, таких как GroupLayout и SpringLayout.

...