Java 使用其他类绘制图形

Java 使用其他类绘制图形,java,swing,graphics,Java,Swing,Graphics,我在下面有两个类:我试图使调用FilledFrame可以生成特定的形状。我用下面的一行代码测试了它,但它没有显示在GUI上。我有什么地方做错了吗?我还需要制作一个能够修改某个矩形位置的Card类,因此我需要在main中制作一个图形对象,并将其输入到FilledFrame和我的Card类中吗 import java.awt.Canvas; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; imp

我在下面有两个类:我试图使调用
FilledFrame
可以生成特定的形状。我用下面的一行代码测试了它,但它没有显示在GUI上。我有什么地方做错了吗?我还需要制作一个能够修改某个矩形位置的
Card
类,因此我需要在main中制作一个图形对象,并将其输入到
FilledFrame
和我的
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);
    }
}
主要类别: 我有什么地方做错了吗

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

问题包括:

  • 尝试直接在JFrame中绘制——永远不要这样做,而是在JPanel中绘制
  • 在组件上调用
    getGraphics()
    ,以获取图形资源。这将导致您获得一个不稳定且寿命短的图形对象,这可能导致绘制失败或NullPointerException
  • 未使用适当的绘画方法绘制
  • 在绘图方法参数中使用int文字,而不是int变量,使所做的任何绘图都是固定的--您永远无法移动或更改它
相反,我建议您:

  • 创建一个扩展JPanel的类,并在该类中绘制
  • 在此类的
    保护组件(图形g)
    方法中绘制
  • 不要忘了在覆盖中调用super的paintComponent方法,以便GUI清除任何脏像素
  • 然后将该JPanel放入需要显示它的JFrame中
  • 对于大多数绘图方法参数,请使用int字段(变量)而不是int文本(所谓的“魔术”数字),以便在程序运行时,如果需要,可以更改绘图
  • 最重要的是,阅读并学习标准Swing图形教程
资源:

  • :应该从哪里开始的主教程
  • :如何创建Swing GUI
  • :Swing图形的入门教程
  • :Swing图形高级教程
我有什么地方做错了吗

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

问题包括:

  • 尝试直接在JFrame中绘制——永远不要这样做,而是在JPanel中绘制
  • 在组件上调用
    getGraphics()
    ,以获取图形资源。这将导致您获得一个不稳定且寿命短的图形对象,这可能导致绘制失败或NullPointerException
  • 未使用适当的绘画方法绘制
  • 在绘图方法参数中使用int文字,而不是int变量,使所做的任何绘图都是固定的--您永远无法移动或更改它
相反,我建议您:

  • 创建一个扩展JPanel的类,并在该类中绘制
  • 在此类的
    保护组件(图形g)
    方法中绘制
  • 不要忘了在覆盖中调用super的paintComponent方法,以便GUI清除任何脏像素
  • 然后将该JPanel放入需要显示它的JFrame中
  • 对于大多数绘图方法参数,请使用int字段(变量)而不是int文本(所谓的“魔术”数字),以便在程序运行时,如果需要,可以更改绘图
  • 最重要的是,阅读并学习标准Swing图形教程
资源:

  • :应该从哪里开始的主教程
  • :如何创建Swing GUI
  • :Swing图形的入门教程
  • :Swing图形高级教程
import java.awt.Graphics;
import java.awt.Shape;
import java.awt.geom.Line2D;
import java.awt.geom.Line2D.Float;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.Canvas;

import javax.swing.JComponent;
import javax.swing.JPanel;


public class Main {

    public static void main (String args[]) {

    FilledFrame frame = new FilledFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);           
    frame.show();
    }
}