Java 标题栏有jframe的空间吗?

Java 标题栏有jframe的空间吗?,java,swing,jframe,Java,Swing,Jframe,我正在创建一个蛇游戏,我使用了一个JFrame,大小为600x600,但我可以绘制的实际区域要小一点 当我尝试在右下角绘制像素时,它会出现在窗口边框的后面 我创建了我的JFrame,如下所示: public class Problem { public static void main(String[] args) { Snake snake = new Snake(); EventQueue.invokeLater(new Runnable() { @Overr

我正在创建一个蛇游戏,我使用了一个
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);
    }
}
}


如何解决我的问题?

我的previos解决方案是正确的,但我修改了代码,使之更适合您的示例。您应该做的是为Snake对象设置首选大小,将其添加到框架中,并为框架调用pack(顺序很重要!)

我已将Snake对象更改为绘制一个圆,因为它可以更好地显示帧边界。您的实现在帧的右下边缘绘制了一个点(不是一条线!),这很难看到。
}

我的previos解决方案是正确的,但我修改了代码,使之更适合您的示例。您应该做的是为Snake对象设置首选大小,将其添加到框架中,并为框架调用pack(顺序很重要!)

我已将Snake对象更改为绘制一个圆,因为它可以更好地显示帧边界。您的实现在帧的右下边缘绘制了一个点(不是一条线!),这很难看到。
}

我通过添加代码来编辑我的问题,这些代码说明了我的问题。即使我在599599上画点,它仍然在我的边界后面window@wariat我改变了我的答案,它解决了我的问题:“你能不能简单地告诉我为什么我的代码不能正常工作?”WARAT,因为你的代码不考虑OS增加的帧边界。因此,帧的
pack
方法是设置帧边界的首选变量。但这种方法只有在框架中填充了所有组件时才能正确工作。我通过添加代码来编辑我的问题,代码演示了我的问题。即使我在599599上画点,它仍然在我的边界后面window@wariat我改变了我的答案,它解决了我的问题:“你能不能简单地告诉我为什么我的代码不能正常工作?”WARAT,因为你的代码不考虑OS增加的帧边界。因此,帧的
pack
方法是设置帧边界的首选变量。但只有当框架中填充了所有组件时,此方法才能正确工作。
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);
        }
    }