строка заголовка получает некоторое пространство jframe? - PullRequest
1 голос
/ 14 января 2020

Я создаю игру со змеями, в которой я использую JFrame размером 600x600, но ее реальная область, где я могу рисовать, немного меньше.

Когда я пытаюсь нарисовать пиксель в правом нижнем углу, он появляется за границей окна.

Я создал свой JFrame следующим образом:

public class Problem {
public static void main(String[] args) {
    Snake snake = new Snake();
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            JFrame gameWindow = new JFrame("Snake");
            gameWindow.add(snake);
            gameWindow.setSize(600, 600);
            gameWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            gameWindow.setLocationRelativeTo(null);
            gameWindow.setVisible(true);
        }
    });
}
private static class Snake extends JPanel {
    protected void paintComponent(Graphics g) {
        Graphics2D g2D = (Graphics2D) g;
        g2D.drawLine(599, 599, 599, 599);
    }
}

}

Как мне решить мою проблему?

1 Ответ

0 голосов
/ 14 января 2020

Мое предыдущее ios решение было правильным, но я изменил свой код, чтобы он лучше подходил к вашему примеру. Что вам нужно сделать, это установить предпочтительный размер для вашего объекта Snake, добавить его в кадр и вызвать пакет для вашего кадра (порядок важен!).

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Problem {
    public static void main(String[] args) {
        Snake snake = new Snake();
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame gameWindow = new JFrame("Snake");
                snake.setPreferredSize(new Dimension(600, 600));
                gameWindow.add(snake);
                gameWindow.pack();
                gameWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                gameWindow.setLocationRelativeTo(null);
                gameWindow.setVisible(true);
            }
        });
    }

    private static class Snake extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2D = (Graphics2D) g;
            g2D.drawOval(549, 549, 50, 50);
        }
    }

Я изменил ваш объект Snake, чтобы нарисовать круг, потому что он лучше показывает границы кадра. Ваша реализация нарисовала точку (не линию!) В правом нижнем краю фрейма, это трудно увидеть. }

...