JFrame не отображает точно указанные значения ширины и высоты? - PullRequest
1 голос
/ 01 августа 2020

Я создаю простую 2D-игру в Java.

Я использую класс JFrame, но я не думаю, что ширина и высота - это то, что я указал, или, возможно, графика неверно.

Вот несколько фрагментов моего кода:

public final static int WIDTH = 600, HEIGHT = 900;
JFrame frame = new JFrame();
frame.setSize(WIDTH, HEIGHT);
g.setColor(Color.BLACK);
g.fillRect(0, 0, WIDTH, HEIGHT - 10);

JFrame отображает черный фон. Однако, исходя из аргументов, которые я дал функции fillRect, в нижней части кадра все равно должна быть полоса белого цвета высотой 10 пикселей. Это не вариант. Белая полоска начинает проявляться только после уменьшения на 30 пикселей высоты кадра.

Спасибо за вашу помощь.

1 Ответ

5 голосов
/ 01 августа 2020

Размер JFrame включает границы, поэтому вам необходимо их разрешить. Чтобы облегчить работу с этим, не указывайте ширину и высоту JFrame. Я рекомендую сделать следующее.

JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(width,height));
frame.add(panel);
// add other components in the panel
frame.pack();
// center on screen.
frame.setLocationRelativeTo(null);
frame.setVisible(true);

Теперь ваша панель будет иметь указанный размер.

Обратите внимание, если вы собираетесь рисовать, убедитесь, что вы переопределили paintComponent(Graphics g) в JPanel и выполните свои картина есть.

@Override
public void paintComponent(Graphics g) {
   super.paintComponent(g);
   // your code here
}
...