为啥我的窗口左角有一个奇怪的白色矩形?
Posted
技术标签:
【中文标题】为啥我的窗口左角有一个奇怪的白色矩形?【英文标题】:Why is there a weird white rectangle in the left corner of my window?为什么我的窗口左角有一个奇怪的白色矩形? 【发布时间】:2020-12-04 21:18:15 【问题描述】:由于某种原因,我的屏幕左上角有一个奇怪的白色矩形。我还尝试在 JPanel 上画一个正方形,但它似乎不起作用。我还应该提一下,我刚刚开始学习 Jframes 和 Jpanels(虽然我已经制作了一些简单的应用程序),所以您在下面看到的代码可能不是很干净:
主要
import javax.swing.*;
public class Main
public static void main(String[] agrs)
JFrame frame = new JFrame("Space Ship");
new GameFrame(frame);
new GameGraphics();
游戏框架
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GameFrame
GameGraphics game;
GameFrame(JFrame frame)
game = new GameGraphics();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(game);
frame.setResizable(false);
frame.setVisible(true);
frame.pack();
游戏图形
import javax.swing.*;
import java.awt.*;
public class GameGraphics extends JPanel implements Runnable
static final int SCREEN_WIDTH = 1000;
static final int SCREEN_HEIGHT = SCREEN_WIDTH * 9 / 16;
static final Dimension SCREEN = new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT);
Player player;
int playerHeight = 25;
int playerWidth = 25;
int playerX = (SCREEN_WIDTH/2) - 200;
int playerY = SCREEN_HEIGHT/2;
GameGraphics()
this.setPreferredSize(SCREEN);
this.setBackground(Color.BLACK);
public void start()
public void newPlayer()
player = new Player(playerX, playerY, playerWidth, playerHeight);
public void newFireball()
public void collisons()
public void gameOver()
public void paintComponent(Graphics g)
super.paintComponent(g);
draw(g);
public void draw(Graphics g)
player.draw(g);
@Override
public void run()
播放器
import javax.swing.*;
import java.awt.*;
public class Player extends Rectangle
int x = 200;
int y = 200;
Player(int playerX, int playerY, int playerWidth, int playerHeight)
super.setBounds(x, y, width, height);
public void draw(Graphics g)
g.setColor(Color.BLUE);
g.fillRect(x, y, width, height);
提前谢谢你!
【问题讨论】:
这是我建议粘贴到屏幕图像中的少数几次之一,显示这个奇怪的矩形。 同意@NomadMaker:在询问图形输出时非常需要屏幕截图。 请显示图片或至少显示图片链接,以便我们查看您的问题。 对不起,我没有及时看到你们,我的问题已经解决了。如果我再问图形问题,我一定会发布截图! 【参考方案1】:您的 main 方法中的 new GameGraphics()
语句有什么意义?
它不是必需的,也不应该在那里。摆脱它。
Player(int playerX, int playerY, int playerWidth, int playerHeight)
super.setBounds(x, y, width, height);
上面的代码有什么意义?你在构造函数中传入参数,但你从不使用参数。
您的代码只能编译,因为 Rectangle 类有这 4 个字段,但它们会有默认值(不是您期望的值),这可能会导致您的绘画问题。
不要扩展矩形!您没有向 Rectangle 类添加任何新功能。
您的Player
类不需要扩展任何类。相反,您的 Player
类应该类似于:
public class Player
int playerX;
int playerY;
int playerWidth;
int playerHeight;
Player(int playerX, int playerY, int playerWidth, int playerHeight)
this.playerX = playerX;
this.playerY = playerY;
this.playerWidth = playerWidth;
this.playerHeight = playerHeight;
public void draw(Graphics g)
g.setColor(Color.BLUE);
g.fillRect(playerX, playerY, playerWidth, playerHeight);
正如 sorifiend 所说,您也没有创建 Player 对象的实例。
【讨论】:
【参考方案2】:看起来您有一个NullPointerException
,因为player
从未在GameGraphics
类中定义,它会导致您的图形出现故障:
Player player;
看起来您已经创建了一个设置播放器的方法,但它从未被调用:
public void newPlayer()
player = new Player(playerX, playerY, playerWidth, playerHeight);
一种解决方案是在GameGraphics()
构造函数中调用newPlayer()
方法:
GameGraphics()
this.setPreferredSize(SCREEN);
this.setBackground(Color.BLACK);
//add it here
newPlayer();
或者你可以像这样创建播放器:
public class GameGraphics extends JPanel implements Runnable
//...
Player player = new Player(playerX, playerY, playerWidth, playerHeight);
//...
一旦修复,它应该不再引起问题。
【讨论】:
以上是关于为啥我的窗口左角有一个奇怪的白色矩形?的主要内容,如果未能解决你的问题,请参考以下文章