2015-03-18 6 views
0

У меня есть размер JFrame и (так как я мало что знаю о макетах), установите его JPanel Макет в null.Размер компонентов JFrame по отношению к размеру окна

Есть ли способ сообщить, что моя программа изменит размер каждого из его компонентов по отношению к размеру окна?

например. У меня размер 200x100 по умолчанию JFrame, на котором кнопка 20x10. Если я изменил размер окна на 400x200, я хочу, чтобы кнопка была (все еще в том же положении относительно краев окна), размер которой уменьшился до 40x20.

Если это работает, есть способ сделать то же самое со шрифтами? Например. размер 11 на 200x100, но что-то вроде размера 14 на 400x200.

+0

* «Я еще мало знаю о макетах») установил его JPanel Layout равным нулю. »* Теперь самое время изучить их. Java GUI должны работать с разными ОС, размером экрана, разрешением экрана и т. Д. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). * «Есть ли способ сделать то же самое со шрифтами?» * Не легко, но вот [пример] (http://stackoverflow.com/a/21066065/418556). –

ответ

0

Добавьте ComponentListener к вашему фрейму и создайте таблицу с размерами по умолчанию для компонентов для определенного окна. componentResized(ComponentEvent e) будет вызываться каждый раз при изменении размера окна. Внутри вы можете изменять размеры компонентов. Или вы реализуете свой собственный LayoutManager.

1

Независимо от того, какое соглашение вы используете для масштабирования компонентов и шрифта, не рекомендуется устанавливать макет в значение null. Widgets behaving strangely when using "setlayout(null)" даст представление о том, почему это склонно к ошибкам. Automatically size JPanel inside JFrame может помочь с масштабированием при изменении размера JFrame вручную.