Подтвердить что ты не робот

Java Swing установлен "фактический" Размер рамки (внутри)

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

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

Пример:

Example

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Затем добавьте его до требуемого размера и установите размер с помощью setSize.

Ответ 5

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

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 прямо в начале конструктора фрейма.

Ответ 6

Установка фактического размера используемого пространства в 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));
}