2010-06-04 2 views
8

Я пытаюсь установить две кнопки внутри панели с помощью виджета Swing. В среде IDE NetBeans свойство my JSeparatorborder установлено в поле свойств (No border).Каков наилучший способ разместить пробелы между объектами? Может ли объект Swing JSeparator быть невидимым разделителем?

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

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

+0

есть «(без границ)» нулевой или объект, представляющий собой пустую границу? 'null' - граница UI по умолчанию –

+0

Кстати, если вы когда-либо действительно хотели это сделать, вам нужно переопределить код внешнего вида JSeparator, чтобы ничего не рисовать. Линии не являются границей. – justkt

+1

JSeperator был изобретен для создания видимых разделителей. Вы не хотите, чтобы разделитель - вы хотите сепаратизм *, который можно достичь одним из многих способов, описанных ниже. –

ответ

18

Вы должны взглянуть на статические методы утилиты на классе 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 себя с соответствующей минимум, максимум и предпочтительных размеров.

+0

Я думаю, что этот код и JPanel могут быть больнее в долгосрочной перспективе, как стандартная практика, чем правильное использование макетов. –

+2

@Warren P : В зависимости от используемого менеджера компоновки этот код может * быть соответствующим образом использовать макеты. Различные менеджеры макетов имеют совершенно разные способы достижения одного и того же результата. –

+0

«Использование подходящих макетов» в моем случае означает «использовать netbeans вместо того, чтобы генерировать мой собственный код, пока я все еще изучаю netbeans, качаю и очищаю свои устаревшие знания языка Java ».;) –

4

JSeparator предназначен для видимого разделителя между компонентами.

От javadoc for JSeparator:

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

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

+0

В большинстве сред, отличных от java, можно было бы рассмотреть возможность выхода этой строки. Странно, что эти ребята не рассматривали. –

+1

Наоборот, для этой цели создаются пустые элементы 'Box' и' Insets'. Считалось, что просто не использовать 'JSeparator' – justkt

+0

Ах да. Вставки идеально подходят для моих целей, и ящик и createHorizontalStrut будет достаточным для любого другого приложения. Теперь я просвещен. Благодарю. –

2

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

+0

Как я могу иметь макет коробки с двумя кнопками в ней с по меньшей мере 10 пикселями между каждой кнопкой? Кажется, я не понимаю. –

+1

'Коробка.createHorizontalStrut (10) 'между кнопками, в' FlowLayout'. – justkt

+0

Прохладный. Другой парень сказал, что в коде, но я пытался сделать это из IDE (netbeans). Оказывается, вы можете сделать это визуально в менеджере компоновки, настроив «вставки». –

1

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

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