Каков наилучший способ размещения пробелов между объектами? Может ли объект Swing JSeparator быть невидимым разделителем? - PullRequest
11 голосов
/ 04 июня 2010

Я пытаюсь поместить две кнопки в панель, используя виджеты Swing. Внутри среды IDE NetBeans мое свойство JSeparator border имеет значение (No border) на панели свойств.

Тем не менее, появляется строка. Это не то, что я ожидал бы от объекта-разделителя. Я делаю что-то неправильно? Исходя из фона в Delphi и C # WinForms, я ожидаю найти некоторые странности в Swing. Но как именно сделать прозрачный зазор определенного размера между двумя кнопками на панели? Нужно ли играть с макетами и избегать JSeparator?

Обновление: Это должно быть тривиально, делать это с макетом и без каких-либо разделительных объектов. Так как ты это делаешь? Я просматриваю настройщик макетов NetBeans и инспектор свойств и не вижу способа сделать это. (Ответ: макеты со вставками вместо разделителей.)

Ответы [ 4 ]

22 голосов
/ 04 июня 2010

Вы должны взглянуть на статические служебные методы класса Box. Их можно использовать для изготовления фиксированных распорок, которые действуют как невидимые разделители; например,

JPanel pnl = new JPanel(new FlowLayout());
pnl.add(new JButton("Hello"));
pnl.add(Box.createHorizontalStrut(10)); // Fixed width invisible separator.
pnl.add(new JButton("Goodbye");

Это создает более компактный код, чем создание / настройка JPanel самостоятельно с соответствующими минимальными, максимальными и предпочтительными размерами.

4 голосов
/ 04 июня 2010

JSeparator должен быть видимым разделителем между компонентами.

Из Javadoc для JSeparator:

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

Если вы хотите поместить компонент между двумя невидимыми компонентами, просто используйте вместо него JPanel. Затем установите размер панели с помощью setPreferedSize() и setMin/MaxSize().

2 голосов
/ 04 июня 2010

Вам не нужен JSeparator.Большинство макетов позволяют вам установить разрыв (пространство) между компонентами.И класс Box может быть особенно полезным.

1 голос
/ 20 марта 2015

Использование addSeparator со значением 1 для высоты делает его невидимым для меня, например:

MyJToolBar.addSeparator(new Dimension(20, 1));
...