Установка максимальной ширины с помощью Matisse GUI Builder - PullRequest
4 голосов
/ 17 декабря 2009

Я хотел бы создать графический интерфейс, в котором некоторые текстовые поля можно изменять по горизонтали, но также указывается максимальная ширина. Например, предпочтительная ширина составляет 100 пикселей, она может быть больше, если размер окна изменяется, но максимально допустимая ширина составляет 200 пикселей. GroupLayout поддерживает это, мы можем указать максимальный размер в методе addComponent (наряду с минимальным и предпочтительным).

Я использую Netbeans и Swing GUI Builder (Матисс) . Я могу установить для текстового поля изменяемый размер, я могу установить предпочтительный размер, но я не нашел места для установки максимального размера (и минимального). Вот раздел макета листа свойств:

альтернативный текст http://img690.imageshack.us/img690/3523/netbeanstfproplayout.png

Поскольку максимальный размер не может быть установлен, Netbeans использует вместо него Short.MAX_VALUE, поэтому, если текстовое поле имеет изменяемый размер, оно не имеет верхнего предела. Я также пытался установить свойство maximumSize компонента, но оно не имеет никакого эффекта и будет проигнорировано.

Если я вручную отредактирую файл .form, я могу изменить часть max="32767" на max="200", и Netbeans сгенерирует правильный код. Есть ли способ установить его без ручного редактирования файла .form?

Ответы [ 2 ]

0 голосов
/ 01 октября 2013

Я решил эту проблему, добавив initComponentsFix() после автоматически сгенерированного initComponents() метода. Затем вы можете программно установить максимальный размер следующим образом:

private void initComponentsFix()
{
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
    this.setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jTabbedPaneTravelForms, javax.swing.GroupLayout.DEFAULT_SIZE, 800, 900) //changed max size
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jTabbedPaneTravelForms, javax.swing.GroupLayout.DEFAULT_SIZE, 1228, Short.MAX_VALUE)
    );
}

По сути, вы переопределяете макет, созданный в методе initComponents(), и вместо максимального значения Short.MAX_VALUE задаете максимальный размер. Это сработало для меня. Окно перестало изменять размер при максимальном размере, а также при минимальном размере, установленном в свойствах.

Хотя этот вопрос старый, я надеюсь, он все равно кому-нибудь поможет. Я решил эту проблему с помощью следующего ответа Проблема изменения размера mainPanel NetBeans 6.7.1 .

0 голосов
/ 14 декабря 2012

Я просматривал параметры, доступные для компонента JTextField в отношении размеров компонента. Эти настройки являются подсказками (подсказками) для LayoutManager . В конечном итоге, LayoutManager определяет размер компонента. В случае Matisse и объекта .form макет полностью контролируется параметрами .form. Не существует автоматизированного метода управления объектом .form из стандартного API.

Существует инструмент под названием FormGenerator , предназначенный для создания объектов .form из существующих объектов Swing. Возможно, вы сможете использовать его для манипуляций с файлом .form в режиме реального времени.

...