Легчайший проставочный компонент в GridBagLayout - PullRequest
7 голосов
/ 01 июня 2009

Какой компонент GridBagLayout лучше всего подходит для предоставления пустого пространства на панели? В идеале я хотел бы использовать компонент, который имеет:

  1. Низкие накладные расходы
  2. Никаких побочных эффектов, когда не требуется пустое пространство (т. Е. Нет минимального размера)
  3. Тривиальный конструктор (без параметров)

JPanel нарушает # 2 выше. Для Box требуется параметр конструктора (№ 3 выше), который на самом деле не нужен в этом простом случае. JLabel работает хорошо, но я волнуюсь, что у него могут быть некоторые издержки, хотя по общему признанию это, вероятно, довольно низко.

Анонимный класс также, кажется, работает хорошо (то есть "new JComponent () {}"), но он добавляет дополнительный файл .class каждый раз, когда я его использую. Я предполагаю, что это не более накладные расходы, чем любой данный обработчик событий. Стоит ли создавать для этого специальный компонент с нулевой реализацией, полученный из JComponent? Есть ли существующий компонент, который мне не хватает?

К вашему сведению, GridBagLayout - одно из моих ограничений для команды, частью которой я являюсь, поэтому другие макеты недоступны.

1 Ответ

11 голосов
/ 01 июня 2009

Вы упоминаете Box, но его можно использовать «облегченным» способом с помощью следующих четырех статических методов, которые просто возвращают компонент. Я использую их все время. Они невидимы по отношению к живописи. В вашем случае это выглядит так, как будто клей - это путь. Тривиальный конструктор (как это плохо!), Низкие накладные расходы. Побочный эффект, когда места не требуется, все зависит от того, как вы расположите свою сетку.

panel.add( Box.createHorizontalGlue() );
panel.add( Box.createVerticalGlue() );
panel.add( Box.createHorizontalStrut( int width ) );
panel.add( Box.createVerticalStrut( int width ) );

JavaDoc здесь: http://java.sun.com/javase/6/docs/api/javax/swing/Box.html

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