Graphics 我如何';初始化';我的图形?

Graphics 我如何';初始化';我的图形?,graphics,draw,shape,init,Graphics,Draw,Shape,Init,我的朋友给我做了一个简单的JFrame,我打算开发它。在使用它的前30分钟内,我遇到了一个问题:它没有绘制图形 下面是绘制图形的代码,以及来自生成JFrame的类的代码 提前谢谢 GameCanvas.java /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package danielballtest; import java.awt.Canva

我的朋友给我做了一个简单的JFrame,我打算开发它。在使用它的前30分钟内,我遇到了一个问题:它没有绘制图形

下面是绘制图形的代码,以及来自生成JFrame的类的代码

提前谢谢

GameCanvas.java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package danielballtest;

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.util.LinkedList;

/**
*
* @author Kris
*/
public class GameCanvas extends Canvas{
Player p;
LinkedList<Stalker> s = new LinkedList<>();

public void paintComponent(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    p.paintItAll(g2d);
    for(int i = 0; i < s.size(); i++) {
        s.get(i).paintItAll(g2d);
    }
}

public GameCanvas() {
    initComponents();
    repaint();
}

public void initComponents() {
    p = new Player(new Point(50,50));
    s.add(new Stalker(new Point(50,100)));
}

public Point getPlayerPos() {
    return p.getPos();
}
}





MainWindow.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package danielballtest;

import java.awt.BorderLayout;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

/**
*
* @author Kris
*/
public class MainWindow extends JFrame{
static Toolkit tk = Toolkit.getDefaultToolkit();
static int xSize = ((int) tk.getScreenSize().getWidth());
static int ySize = ((int) tk.getScreenSize().getHeight());
/**
 * @param args the command line arguments
 */
public MainWindow() {
    super("STALKER!!!!!!!!!!");
    GameCanvas canvas = new GameCanvas();
    add(canvas, BorderLayout.CENTER);
    setSize(xSize, ySize);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);      
    canvas.createBufferStrategy(2);
}
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new MainWindow();
        }
    });
}
}
GameCanvas.java
/*
*要更改此模板,请选择工具|模板
*然后在编辑器中打开模板。
*/
包装Danielball试验;
导入java.awt.Canvas;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Point;
导入java.util.LinkedList;
/**
*
*@作者克里斯
*/
公共类GameCanvas扩展画布{
玩家p;
LinkedList s=新建LinkedList();
公共组件(图形g){
Graphics2D g2d=(Graphics2D)g;
p、 油漆涂料(g2d);
对于(int i=0;i
您正在使用旧的AWT
Canvas
类作为基本组件。该类遵循AWT绘制机制,其中没有
paintComponent
方法,您应该重写
paint
以进行自定义图形

将基类更改为
JComponent
,可以使用更新的绘制机制:

...
import javax.swing.JComponent;

public class GameCanvas extends JComponent {
如果您想了解更多关于AWT和Swing的信息,请比较绘画在AWT和Swing中的工作方式