растянутая кнопка в gridLayout - PullRequest
       36

растянутая кнопка в gridLayout

2 голосов
/ 01 февраля 2011

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

myButton.setSize(10,10);

но, похоже, не работает, я также использую

frame.pack();

может быть проблема, заранее спасибо

Ответы [ 3 ]

3 голосов
/ 01 февраля 2011

Вы должны воздерживаться от установки размера самостоятельно. Вы должны выбрать правильный LayoutManager, который сделает эту работу за вас.

(Если вы явно не сделаете setLayout(null) установленные вами размеры будут отброшены, и текущий менеджер компоновки назначит новые размеры компонентам.)

Вы говорите, что используете GridLayout. Этот макет довольно «негибкий», и если вы хотите получить преимущества GridLayout, но большую гибкость, вы можете попробовать GridBagLayout.

Если вы не найдете менеджера по расположению, который соответствует вашим потребностям, не бойтесь писать свой собственный. (Это пять относительно простых способов реализации.)

Если вы опубликуете снимок экрана с вашим текущим приложением и объясните, как вы хотите, чтобы он выглядел, мы сможем помочь вам в дальнейшем.

Некоторые полезные ссылки

1 голос
/ 01 февраля 2011

Когда у aloobe есть более общее решение для вас.Я бы сказал, что немедленным решением было бы добавить кнопку в JPanel, настроить Layoutmanager на макет, такой как GridLayout, или другой LayoutManager, если вы найдете другой, который вам больше подходит.

И добавьте эту панель в исходныйпанель, вместо кнопки.

1 голос
/ 01 февраля 2011

Когда вы используете диспетчеры компоновки (например, GridLayout), тогда вызовы setSize() обычно не работают, потому что диспетчер компоновки в конечном итоге решает, как определить размер и поместить каждый компонент в контейнер.

Что вы можете сделать, это позвонить setPreferredSize(), setMaximumSize() и / или setMinimumSize(). В зависимости от используемого менеджера макетов один или несколько из этих запросов (потому что это действительно так) будут выполнены. Когда вы вызываете frame.pack(), он пытается изменить размер всего содержимого контейнера (и его подконтейнеров) до их предпочтительных размеров.

Итак, в вашем случае, вызов myButton.setPreferredSize (10, 10);, вероятно, будет работать. Однако он все равно будет изменен, если контейнер изменит размер. Если вы не хотите этого, я могу опубликовать и другие решения.

...