Размер JComponent не зависит от размера экрана

В моем приложении много JPanel и других компонентов Swing, которые что-то отображают. Я хотел бы, чтобы размер этих JComponents не зависел от размера экрана, например, мой графический интерфейс будет в порядке с другим разрешением. Я думал сделать что-то подобное в своем коде

public class myPanel extends JPanel {
 //constructors and other useful methods

@Override
public Dimension getPreferredSize() {
  Dimension screen_size=Toolkit.getDefaultToolkit().getScreenSize();
  return new Dimension (0.50*screen_size.width, 0.30*screen_size.height); }

В двух словах, задайте размер JPanel в процентах от размера экрана. Это хорошо? Нет быстрого способа? Потому что я должен делать это для каждого JComponent, который я использую. Что я должен делать? PS: Предположим, что я использую макеты менеджера, которые учитывают предпочтительный размер.


person user2896152    schedule 26.05.2015    source источник
comment
Что не так с вашим решением? И что вы имеете в виду под быстрым - короткое время выполнения или короткое время кодирования?   -  person MyPasswordIsLasercats    schedule 26.05.2015
comment
Насколько мне известно, предпочтительным способом было бы использование менеджеров компоновки и предоставление им возможности определять размер ваших компонентов. Размер экрана будет влиять только на размер окна, и менеджеры компоновки распространят это на все компоненты. Если вы не можете делать то, что хотите, со встроенными менеджерами компоновки, обратите внимание на сторонние библиотеки, такие как MigLayout где вы можете определить, что ваша панель будет занимать 50% ширины окна и 30% его высоты.   -  person Thomas    schedule 26.05.2015


Ответы (1)


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

Например, 3 компонента с:

weightx 2, weightx 1, weightx 1

Тогда первый компонент всегда будет использовать 50% окна, следующие два — по 25% окна каждый. Это также автоматически изменит размер при изменении размера окна, а не только монитора.

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

См.: https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

person Tim B    schedule 26.05.2015