如何同时运行/显示多个图形方法?

我使用的是非常基本的Java图形,并试图同时显示多种图形方法。换句话说,我想将它们重叠。

当前,当它运行时,它会短暂显示一个图形,然后消失并显示另一个图形。

有什么办法可以解决这个问题?

这是我图形的跑步者。

import javax.swing.JFrame;

public class GraphicsRunnerCopy extends JFrame
{
private static final int WIDTH = 800;
private static final int HEIGHT = 600;

public GraphicsRunnerCopy(int x,int y,int z,int n)
{
  super("My Frame");
  setSize(WIDTH,HEIGHT);
  getcontentPane().add(new Graphic(x,y,z,n));
  setVisible(true);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public static void main(String[] args)
  {
     GraphicsRunnerCopy run = new GraphicsRunnerCopy(3,3,1,20); //I want this to display at
     GraphicsRunnerCopy run2 = new GraphicsRunnerCopy(0,5,4); //the same time as this

  }
}

在跑步者正在显示的对象中,我正在使用如下代码。

import java.awt.Graphics;
import java.awt.Color;
import java.awt.Canvas;

class Graphic extends Canvas
{
private int x,n;

public Graphic(int xa,ya,za,na)
{
  x = xa;
  y = ya;
  z = za;
  n = na;

  setSize(800,600);
  setBackground(Color.WHITE);       
  setVisible(true);
}

public void paint( Graphics window )
{
  Color tan = new Color(185,133,91);    

  window.setColor(tan);
  window.fillRect((x*n+20/z),(y*n+20/z),(320/z),(320/z)); //base

 }
}

感谢您的帮助,谢谢。

zligy911 回答:如何同时运行/显示多个图形方法?

您需要从组件代码中分离出逻辑代码和数据:

  • 只有一个类可以绘制所有图形(这是组件代码),并且这是具有public void paint(Graphics g)方法的类
  • 图形实体将是逻辑类,这意味着这些类不应扩展Canvas或任何其他 component 类型的类。
  • 这些绘图类(称为“绘图”)也可以具有自己的paint方法,但是它们将由组件类调用。
  • 应该允许组件类保存多个绘图实体,例如在ArrayList中,
  • 然后在组件类的绘画方法中,遍历列表,绘制每个Drawing对象。

例如,如果我使用Swing进行此操作(因为AWT比Swing更加过时),我将执行以下操作:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

@SuppressWarnings("serial")
public class GuiFun extends JPanel {
    private static final int PREF_W = 800;
    private static final int PREF_H = 600;
    private static final Color BACKGROUND = Color.WHITE;
    private List<Draw> draws = new ArrayList<>();

    public GuiFun() {
        setPreferredSize(new Dimension(PREF_W,PREF_H));
        setBackground(BACKGROUND);
    }

    public void addDraw(Draw draw) {
        draws.add(draw);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (Draw draw : draws) {
            draw.myPaint(g);
        }
    }

    private static void createAndShowGui() {
        GuiFun guiFun = new GuiFun();
        guiFun.addDraw(new Draw(3,3,1,20));
        guiFun.addDraw(new Draw(0,5,4));

        JFrame frame = new JFrame("GuiFun");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(guiFun);
        frame.pack();
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

import java.awt.Color;
import java.awt.Graphics;

public class Draw {

    private static final Color TAN = new Color(185,133,91);
    private int x;
    private int y;
    private int z;
    private int n;

    public Draw(int x,int y,int z,int n) {
        this.x = x;
        this.y = y;
        this.z = z;
        this.n = n;
    }

    public void myPaint(Graphics g) {
        g.setColor(TAN);
        g.fillRect((x * n + 20 / z),(y * n + 20 / z),(320 / z),(320 / z));
    }
}
本文链接:https://www.f2er.com/3113248.html

大家都在问