在JFrame中绘制Graphics2D

时间:2011-06-07 03:57:46

标签: java swing graphics jframe paintcomponent

我正在制作一款2D垂直射击游戏,其中一切都是编码(和工作)但图形。我之前没有使用过Graphics类,所以这对我来说都是新手。以下是我用于将所有内容绘制到JFrame的代码:

public void paintAll()
{
    Graphics h = new Graphics2D();
    for(Bullet j : GameState.getEnBullets()){
        h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    for(Enemy j : GameState.getEnemies()){
        h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    for(Bullet j : GameState.getPlayBullets()){
        h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    this.paint(h);
}

第一行“Graphics h = new Graphics2D();”产生错误,因为Graphics2d是抽象的,但我不知道从哪里开始。

我需要代码来获取我拥有的所有图像并将它们绘制到JFrame中的点。我提醒你,我以前从未这样做过,所以请告诉我这是否是错误的做法。

2 个答案:

答案 0 :(得分:6)

改为覆盖paintComponent();它将提供Graphics上下文。您可以cast将其Graphics2D

Graphics2D g2d = (Graphics2D) g;

附录:这假设您在paintComponent()中覆盖了JComponent,然后将其添加到JFrame

答案 1 :(得分:4)

与Will的第二个主题(我的直升机视图)有关同一事物Error with timer and JFrame

的联系

然后通过安德鲁汤普森的魔法世界来纠正直觉

我补充说(我希望这是正确的,因为我不喜欢paint,paintComponent或paintComponents以及自定义图形)

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class MinimumSize extends JFrame {

    private static final long serialVersionUID = 1L;

    public MinimumSize() {
        setTitle("Custom Component Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void display() {
        add(new CustomComponent());
        pack();        
        setMinimumSize(getSize());// enforces the minimum size of both frame and component
        setVisible(true);
    }

    public static void main(String[] args) {
        MinimumSize main = new MinimumSize();
        main.display();
    }
}

class CustomComponent extends JComponent {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(100, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}