Java Graphics 2D使用变量名称标记形状的步骤

Java Graphics 2D使用变量名称标记形状的步骤,java,graphics,Java,Graphics,我已经在JPanel中实现了2D图形,并让它在上面画了一个圆环。但是,我希望以后能够调用2D形状来移动它们。我怎么会做这样的事?我试着把它声明为一个变量,但我不知道怎么做,任何帮助都会很好,谢谢 package com.aqagame.harrykitchener; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import ja

我已经在JPanel中实现了2D图形,并让它在上面画了一个圆环。但是,我希望以后能够调用2D形状来移动它们。我怎么会做这样的事?我试着把它声明为一个变量,但我不知道怎么做,任何帮助都会很好,谢谢

package com.aqagame.harrykitchener;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Game 
{



    public Game()
    {

        JFrame window = new JFrame ("Main Game");
        JPanel firstPanel = new JPanel(new GridLayout(3, 1))
        {
            public void paintComponent(Graphics g)
            {
                Graphics2D g2d = (Graphics2D) g;
                g2d.setColor(Color.RED);
            }
        };



        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(firstPanel);
        window.setSize(700, 600);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }


    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Game();
            }
        });

    }

}

第一步可以是自己的类,负责绘制游戏内容。(使用匿名内部类解决此问题的扩展性不太好)

然后,您要绘制的形状可以驻留在
列表中,您只需迭代即可绘制它们

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Game 
{
    public Game()
    {

        JFrame window = new JFrame ("Main Game");
        JPanel firstPanel = new GamePanel();

        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(firstPanel);
        window.setSize(700, 600);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }


    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Game();
            }
        });

    }
}

class GamePanel extends JPanel
{
    private final List<Shape> shapes = new ArrayList<Shape>();

    GamePanel()
    {
        shapes.add(new Ellipse2D.Double(10,20,30,40));
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.RED);

        for (Shape shape : shapes)
        {
            g2d.draw(shape);
        }
    }

}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Shape;
导入java.awt.geom.Ellipse2D;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公开课游戏
{
公共游戏()
{
JFrame窗口=新JFrame(“主游戏”);
JPanel firstPanel=新游戏面板();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(firstPanel);
设置窗口大小(700600);
window.setLocationRelativeTo(空);
window.setVisible(true);
}
公共静态void main(字符串参数[])
{
SwingUtilities.invokeLater(新的Runnable()
{
@凌驾
公开募捐
{
新建游戏();
}
});
}
}
类GamePanel扩展了JPanel
{
私有最终列表形状=新建ArrayList();
游戏面板()
{
添加(新的椭圆2d.Double(10,20,30,40));
}
@凌驾
受保护组件(图形g)
{
Graphics2D g2d=(Graphics2D)g;
g2d.setColor(Color.RED);
用于(形状:形状)
{
g2d.绘制(形状);
}
}
}

重要提示:顾名思义,这应该成为一个“游戏”。如果你继续这样做,你很可能会遇到严重的困难。Stackoverflow不是一台“答案生成机器”,一个游戏不能通过反复试验来编程,而是需要一些计划。例如,您现在可以轻松地用鼠标拾取形状(使用MouseListener和
shape.contains(mousePosition)
方法),但是拖动它们或者仅仅用不同的颜色绘制它们需要一些更大的基础结构。例如,你应该考虑一些类似于<代码>游戏实体< /代码>类,它封装了游戏中出现的实体等。

上面的代码中没有任何东西画出一个圆。