Как сделать, чтобы рабочая часть JFrame была равна устанавливаемым размерам окна?
Есть код:
JFrame frame = new JFrame();
frame.setSize(200,200);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
При его запуске создаётся окно с размером 186х193.
Но мне нужна рабочая часть окна 200х200
(без учёта рамки и заголовка).
Мне приходиться делать вычисления, чтобы рабочая часть окна имела размер 200х200:
frame.setSize(216,239);
можно как-то автоматизировать этот процесс?
Ответы (1 шт):
Из-за чего происходит проблема?
JFrame - это окно вашего приложения. Но у каждого окна есть рамка:
И рамка учитывается в размерах окна, когда вы просто вызываете метод setSize().
Как её решить?
Вам нужно установить размер рабочей поверхности окна (ContentPane).
Самый простой вариант - с английского аналога :
jFrame.getContentPane().setSize(800,400);
Он решает проблему, но лучше установить на фрейм JPanel как ContentPane. Это можно сделать вот так (уже мой собственный вариант, из головы):
JPanel panel = new JPanel();
frame.setContentPane(panel);
На английском сайте тоже самое предлагают сделать немного по-другому:
JFrame jf = new JFrame();
JPanel jp = new JPanel();
jp.setPreferredSize(new Dimension(400,800));
jf.getContentPane().add(jp);
jf.pack();
Важно: добавить на фрейм панель нужно до того, как вы отображаете окно:
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setContentPane(panel);
frame.setSize(200,200);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Ссылки
