我正在创建一个贪吃蛇游戏,其中使用尺寸为 600x600
的 JFrame
,但我可以绘制的实际区域要小一些。
当我尝试在右下角绘制像素时,它出现在窗口边框后面。
我像这样创建了我的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);
}
}
}
如何解决我的问题?
最佳答案
我以前的解决方案是正确的,但我修改了我的代码以更好地适合您的示例。您应该做的是为您的 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 对象更改为绘制圆形,因为它可以更好地显示框架边框。您的实现在框架的右下边缘绘制了一个点(不是一条线!),很难看到。 }
关于java - 标题栏是否占用了jframe的一些空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59733094/