Ответ 1
Вы можете установить предпочтительный размер пакета и пакет вызовов в JFrame, но в целом обычно лучше всего настроить размер компонентов на основе их предпочтительных размеров, определяемых их менеджерами компоновки.
У меня есть JFrame, который содержит только один JPanel. Я попытался установить размер панели и упаковать фрейм, но это не влияет.
Если я установил размер JFrame, он изменит размер, чтобы он включал строку заголовка и границы. Как установить "фактический размер", чтобы он не включал строку заголовка и границы?
Пример:
Заранее спасибо, ребята
Вы можете установить предпочтительный размер пакета и пакет вызовов в JFrame, но в целом обычно лучше всего настроить размер компонентов на основе их предпочтительных размеров, определяемых их менеджерами компоновки.
Если вы установите предпочтительный размер JPanel, тогда метод JFrame pack() будет его уважать.
Это пример установки размера JPanel и упаковки фрейма:
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 200));
frame.add(panel);
frame.pack();
frame.setVisible(true);
Вы попробовали что-то вроде этого?
Используйте метод .getInsets
на JFrame
, который дает размеры размеров вокруг неклиентской области.
Затем добавьте его до требуемого размера и установите размер с помощью setSize
.
Если вы хотите получить рамку 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 прямо в начале конструктора фрейма.
Установка фактического размера используемого пространства в 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));
}