【发布时间】:2019-09-30 23:03:57
【问题描述】:
我正在尝试使用 JFrame 和画布为游戏构建简单的 gui。 Window 是一个扩展 JFrame 类的类,我正在使用 fillRect 方法来填充黑色矩形。每次我运行我的程序时,框架窗口都不是黑色的,它是默认颜色。我不知道我的代码有什么问题。
package test1;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
/**
*
* @author sabertooth
*/
public class Test1 extends Canvas implements Runnable{
/**
* @param args the command line arguments
*/
private final static int width=600;
private final static int height=500;
private Window gui;
private Thread t;
private boolean status=false;
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public static void main(String[] args) {
// TODO code application logic here
Dimension d=new Dimension(width,height);
Test1 mc=new Test1();
mc.gui=new Window();
mc.setPreferredSize(d);
mc.gui.setTitle("Welcome to my game");
mc.gui.add(mc);
mc.gui.setLocationRelativeTo(null);
mc.gui.setVisible(true);
Test1 t1=new Test1();
t1.start();
}
@Override
public void run() {
while(status)
{
update();
render();
}
}
public void render(){
}
public void update(){
BufferStrategy bs=getBufferStrategy();
if(bs==null)
{
createBufferStrategy(3);
return;
}
Graphics g=bs.getDrawGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.dispose();
bs.show();
}
public synchronized void start(){
setStatus(true);
t=new Thread(this, "Game Thread");
t.start();
}
}
【问题讨论】:
-
DoubleDouble 的答案可能是正确的,但为什么我想知道 JFrame 呢?如果您只想通过 BufferStrategy 在 Canvas 上绘图,我认为您想完全绕过 Swing 及其内部机制(例如双缓冲)。否则,您不妨在 JFrame 中绘制一个 JPanel 并让 Swing 为您完成低级别的工作。我建议你使用普通的 AWT 窗口。