2010-04-26 2 views
4

Я использую следующие:Java Контейнерные ограничения Вопрос

java.awt.Container.add(Component comp, Object constraints) 

Как specificy ограничения объекта? Мне нужно разместить компонент в контейнере.

Ох, и мой класс расширяет JInternalFrame, если это помогает ...

мне нужно указать координаты, чтобы поместить компонент в контейнере

ответ

1

Объекты constraints зависят от того, какой менеджер макета вы используете.

Например, с BorderLayout вы будете иметь только некоторые константы: container.add(element, BorderLayout.CENTER)

Хотя если менеджер компоновки контейнера является GridBagLayout вы будете иметь GridBagConstraints объект с заданными параметрами.

Некоторые менеджеры макетов (например, FlowLayout или GridLayout) не нуждаются в каких-либо ограничениях, так как они фактически решают, как самим размещать вещи.

Как примечание стороны, если вам нужно абсолютное позиционирование не будет иметь никакого менеджера компоновки:

container.setLayout(null); 
container.add(element1); 

Insets insets = pane.getInsets(); 
element1.setBounds(..); //here you set absolute position 
+0

Спасибо. Это почти сработало. Если я использую setBounds для того, чтобы, например, размер кнопки, я могу получить «по умолчанию» высоту и ширину для кнопки (т.е. авторизованную до размера отображаемого текста), так что, когда я вызываю setBounds, у меня нет для указания высоты и ширины (только для позиции x, y)? – llm

+0

Вы можете предварительно скопировать их один раз и использовать для каждой добавляемой кнопки, чтобы получить размер в соответствии с шрифтом, который вы должны использовать __component.getFontMetrics() __, тогда у вас появятся требуемые методы (например, __stringWitdh («foobar») __) для получения размеров .. – Jack

+0

Я на самом деле закончил использование «componentName» .getMinimumSize(). width/height в случае, если кто-то столкнется с этим. – llm

0

Это зависит от менеджера компоновки, которую вы используете. Например, если вы используете BorderLayout, вы можете использовать такие значения, как BorderLayout.CENTER и BorderLayout.NORTH. Если вы не используете диспетчер компоновки, вам нужно вручную установить положение компонентов.

+0

Как это сделать вручную? Мне нужно в основном дать ему «координаты», чтобы указать его позицию. Я просто не знаю, как построить объект «ограничение». – llm

+1

Вы можете передать 'null' для объекта ограничения и использовать' setBounds' или 'setLocation' на компоненте для его размещения. –

+1

Вам не нужно передавать какие-либо ограничения на add-method, если вы установите границы и местоположение вручную.Однако диспетчер компоновки должен иметь значение «null». – aioobe

0

Собственный объект ограничений зависит от текущего LayoutManager.

Например, если вы используете BorderLayout, объект ограничений может, например, быть BorderLayout.SOUTH.

3

Посмотрите на tutorials for LayoutManagers! В примерах вы увидите, какие ограничения используются, с какими макетами и как.

+1

+1, для ссылки на учебник. Это, очевидно, новичок, и учебник полон примерами и может объяснить, какие ограничения более подробно, чем простые предложения одной строки в других ответах. Мало того, что, надеюсь, плакат будет смотреть на «оглавление», чтобы изучить другие основные функции Swing перед публикацией следующего вопроса. – camickr

1

От java.awt.Container class'es: Javadoc

Ограничения определяются конкретной компоновки используется менеджер. Например, класс BorderLayout определяет пять ограничений: BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.EAST, BorderLayout.WEST и BorderLayout.CENTER.

Класс GridBagLayout требует объекта GridBagConstraints. Невозможность передать объект типа «правильный тип» приводит к исключению IllegalArgumentException.

Этот комментарий можно найти на защищенном методе addImpl.

Смежные вопросы