Как сделать фиксированные границы компонента свинга - PullRequest
0 голосов
/ 06 октября 2011

У меня есть JPanel, к которому я добавил несколько компонентов (флажок, комбо и т. Д. ). Я заметил, что, когда рамка развернута, границы компонентов также сдвигаются или сдвигаются вправо. Затем при восстановлении компоненты возвращаются в исходное положение.

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

Мы используем настроенный менеджер макетов, который реализует java.awt.LayoutManager2. Содержание класса очень велико, поэтому оно будет указывать на области, которые определяют границы для компонентов.

protected int hMargin = 0;
..
Insets insets = target.getInsets();
Dimension size = target.getSize();

int  x = (size.width - insets.left - insets.right - 15 * hMargin);

И из фрейма, который вызывает макет и добавляет компоненты, как показано ниже:

JPanel  pl = new JPanel(new OurLayout(this))
//add the component to panel
pl.add(checkBox);
..

В точке, где мы принимаем решение x, я хочу добавить строку, чтобы предотвратить смещение компонентов, когда кадр, к которому добавлена ​​вызывающая панель , развернут максимально.

Может кто-нибудь предложить какие-либо идеи о том, как этого добиться? Пример кода будет хорошо оценен.

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

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

Или для простого решения добавьте свою пользовательскую панель в другую панель, которая использует FlowLayout. Тогда предпочтительный размер вашей пользовательской панели будет соблюден.

0 голосов
/ 06 октября 2011

Благодаря Thomas и camickr за их рекомендации я нашел решение, используя приведенную ниже строку синтаксиса.

      size=c.getMinimumSize();
      int dist =(size.width - insets.left - insets.right);
      int move = ((dist > 32) ? 35 : 38);
      x = (dist + move * hMargin);

Еще раз спасибо всем за рекомендации.

...