我必须为学校编制一个突破性游戏,我遇到了一个问题。我需要绘制我的2D图形但我无法看到它们。
这是我的小程序。 test()是一个JPanel,我将在下面链接。
public class Gamefield extends Applet{
test t;
@Override
public void init() {
t = new test();
setSize(1600, 900);
Frame frame = (Frame)this.getParent().getParent();
frame.setTitle("Breakout");
add(t);
}
}
这是我的JPanel,我在其中调用repaint()。
public class test extends JPanel implements Runnable {
public test(){
setSize(1600,900);
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
while(true){
System.out.println("a");
try{
repaint();
Thread.sleep(1000/60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void paintComponent(Graphics g) {
System.out.println("draw");
super.paintComponents(g);
g.setColor(Color.BLACK);
g.drawOval(500,500,100,100);
g.fillRect(100,100,100,100);
}
}
我希望有人可以帮助我。我不知道我可以尝试修复它。
答案 0 :(得分:3)
import java.awt.*;
import javax.swing.*;
public class GameField extends JApplet {
@Override
public void init() {
// Applet is FlowLayout by default, which does not stretch components
// let's use GridLayout instead
setLayout(new GridLayout());
add(new test());
}
}
class test extends JPanel {
@Override
public void paintComponent(Graphics g) {
System.out.println("draw");
// super.paintComponents(g); // WRONG method! Broken paint chain
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawOval(500, 500, 100, 100);
g.fillRect(100, 100, 100, 100);
}
}