Java Swing set "фактический" размер кадра (внутри) - PullRequest
19 голосов
/ 06 мая 2011

У меня есть JFrame, который содержит только один JPanel. Я попытался установить размер панели и упаковать рамку, но это никак не отразилось.

Если я установлю размер JFrame, он изменит размер, чтобы включить строку заголовка и границы. Как установить «фактический размер», чтобы он не включал строку заголовка и границы?

Пример:

Example

Заранее спасибо, ребята

Ответы [ 6 ]

20 голосов
/ 06 мая 2011

В JFrame вы можете установить предпочитаемый размер и пакет вызовов для ContentPane, но, как правило, лучше всего разрешать компонентам самим определять размер в соответствии с их предпочтительными размерами, определяемыми менеджерами компоновки.

10 голосов
/ 06 мая 2011

Если вы установите предпочтительный размер JPanel, то метод pack () JFrame будет его учитывать.

9 голосов
/ 06 мая 2011

Это пример установки размера JPanel и упаковки кадра:

JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 200));
frame.add(panel);
frame.pack();
frame.setVisible(true);

Вы пробовали что-то подобное?

4 голосов
/ 06 мая 2011

Используйте метод .getInsets для JFrame, который дает размеры размеров вокруг области, не являющейся клиентом.

Затем добавьте его к желаемому размеру и установите размер, используя setSize.

2 голосов
/ 01 сентября 2015

Если вы хотите получить рамку рамки, сначала используйте pack на вашей рамке, а после этого получите рамку Вставки , как показано ниже:

frame.pack();
Insets insets = frame.getInsets();
int frameLeftBorder = insets.left;
int frameRightBorder = insets.right;
int frameTopBorder = insets.top;
int frameBottomBorder = insets.bottom;

Лучше использовать метод pack сразу после вашего setResizable (boolean) , потому что изменяемый размер по какой-то причине меняет границы вашего кадра, но если вы не используете метод изменения размера, тогда используйте Метод pack прямо в начале конструктора фреймов.

0 голосов
/ 15 января 2017

Установка фактического размера используемого пространства в JFrame может быть выполнена путем установки предпочтительного размера контейнера в методе createComponents(Container container).Сделано таким образом, вы пропускаете установку размера всего JFrame до setPreferredSize(new Dimension (width, length) в методе run().Итак, код будет выглядеть так:

@Override
public void run() {
    JFrame frame = new JFrame();
    // other code ...
    this.createCompoents(frame.getContentPane());
}

private void createCompoents(Container container) {
   // other code ...
   container.setPreferredSize(new Dimension(width, length));
}
...