Нужна помощь с макетами в Swing - PullRequest
0 голосов
/ 12 апреля 2010

Я использую Java Swing, и у меня возникает следующая проблема:

У меня есть класс TnaiPanel, который расширяет JPanel. В этом классе я создаю 3 компонента, а затем размещаю их в горизонтальной линии с помощью BoxLayout.

Также у меня есть класс TnaimDinamimPanel, который также расширяет JPanel. Этот класс содержит несколько вхождений TnaiPanel, расположенных вертикально с помощью BoxLayout.

Также у меня есть класс MainFrame, который расширяет JFrame. Этот фрейм содержит строку меню и одну главную панель. Основная панель может меняться (при выборе определенного пункта меню я создаю новую панель и устанавливаю ее так, чтобы она отображалась в качестве основной панели рамки).

Теперь по какой-то причине я получаю «BoxLayout не может быть общим», когда я добавляю недавно созданный TnaimDinamimPanel к компонентам фрейма.

Я не против использования различных объектов макета. Результат, который я хочу получить, является своего рода «таблицей» компонентов, где каждая TnaiPanel будет иметь фиксированные размеры компонентов и интервалы, по сути, выступая в роли «строки» в «таблице».

Спасибо, Малки.

Ответы [ 3 ]

3 голосов
/ 12 апреля 2010

Вы, вероятно, создаете только один экземпляр BoxLayout. Создайте новый каждый раз, когда он вам нужен (то есть по одному на TnaiPanel, по одному на TnaimDinamimPanel и, вероятно, по одному на мейнфрейм).

2 голосов
/ 12 апреля 2010

Чтобы ответить на вторую часть вашего вопроса, то есть «имея таблицу компонентов», я бы сказал, что вы не можете сделать это с разными панелями, кроме случаев, когда вы начинаете устанавливать отдельные минимальные, преф и максимальные размеры компонентов и панели, которые крайне не рекомендуется.

Если вам нужно правильное выравнивание, как в таблице компонентов, то вам нужно поместить все ваши компоненты в одну панель, что также означает, что вам нужно использовать только один макет. Однако единственная разметка качания по умолчанию, которая позволяет вам делать то, что вы хотите, это GridBagLayout. На самом деле GroupLayout (Java 6) также будет соответствовать требованиям, но для него абсолютно необходим графический дизайнер (например, внутри NetBeans).

Если, как и у меня, у вас аллергия на строителей, то вам лучше использовать одну стороннюю LayoutManager, которая предназначена для программного использования (я бы не стал считать GridBagLayout в этой категории, хотя у меня есть уже использовал его в прошлом).

MigLayout (как предполагает Скептик) - один из вариантов. Другой вариант - DesignGridLayout , который может лучше соответствовать вашим целям и проще в использовании, чем MigLayout.

1 голос
/ 12 апреля 2010

Попробуйте MiGLayout вместо.

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