2015-05-26 8 views
0

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

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

+1

Что случилось с вашим решением? И что вы подразумеваете под «быстрым» - короткое время выполнения или короткое время кодирования? – MyPasswordIsLasercats

+1

AFAIK предпочтительным способом было бы использовать менеджеров компоновки и позволить им определять размер ваших компонентов. Размер экрана просто повлияет на размер окна, и менеджеры макетов будут распространять это на все компоненты. Если вы не можете делать то, что хотите, со встроенными менеджерами макетов, посмотрите на сторонние библиотеки, такие как [MigLayout] (http://www.miglayout.com/), где вы могли бы определить свою панель, чтобы занять 50% ширина окна и 30% его высоты. – Thomas

ответ

0

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

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

weightx 2, weightx 1, weightx 1 

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

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

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

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