使用其他类绘制图形

时间:2016-12-10 04:47:14

标签: java swing graphics

我下面有两个课程:我试图做到这一点,以便调用FilledFrame会形成某些形状。我已经使用下面的一行测试了它,但它没有显示在GUI上。我在这里做错了吗?我还需要创建一个能够修改矩形位置的Card类,所以我需要在main中创建一个图形对象并将其输入FilledFrame和{{{} 1}} class?

Card

主要课程:

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import javax.swing.*;

public class FilledFrame extends JFrame implements ActionListener {

    static int FRAME_WIDTH = 500;
    static int FRAME_HEIGHT = 100;
    Graphics g = getGraphics();

    public FilledFrame () {
        g.drawLine(1, 1, 100, 100);

        setSize(FRAME_WIDTH, FRAME_HEIGHT);

        setVisible(true);
    }

    private void createComponents() {
        ...
    }

    private void createCards() {
        ...
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    }

    public static void draw (Graphics g) {
        g.fillRect(0, 50, 100, 150);
    }
}

1 个答案:

答案 0 :(得分:4)

  

我在这里做错了吗?

很抱歉,但是您猜测如何进行Swing绘图,虽然这可能适用于简单的Java概念,但它不会像Swing图形那样复杂。

问题包括:

  • 尝试直接在JFrame中绘制 - 永远不要这样做,而是在JPanel中绘制。
  • 在组件上调用DECLARE @Code NVARCHAR(MAX) 以获取图形资源。这将导致您获得一个不稳定且短暂的Graphics对象,这可能导致绘画失败或NullPointerExceptions
  • 没有使用合适的绘画方法。
  • 您在绘图方法参数而不是int变量中使用了int literals,使您的任何绘图都修复了 - 您永远无法移动或更改它。

相反,我建议你:

  • 创建一个扩展JPanel并在该类中绘制的类。
  • 在此课程getGraphics()方法中绘制。
  • 不要忘记在你的覆盖中调用超级的paintComponent方法,这样你的GUI就可以清除任何脏像素。
  • 然后将JPanel放入需要显示它的JFrame中。
  • 对于大多数绘图方法参数,使用int字段(变量)而不是int literals(所谓的" magic"数字),以便在程序运行时如果您愿意,可以更改绘图。
  • 最重要的是,阅读并研究标准的Swing图形教程。

资源: