gpt4 book ai didi

java - 与其他类(class)一起绘制图形

转载 作者:行者123 更新时间:2023-12-01 18:00:53 26 4
gpt4 key购买 nike

我有下面两个类:我正在尝试使其调用 FilledFrame 可以形成某些形状。我已经用下面的一行测试了它,但它没有显示在 GUI 上。我在这里做错了什么吗?我还需要创建一个能够修改某些矩形位置的 Card 类,因此我需要在主函数中创建一个图形对象并将其输入到 FilledFrame 和我的类?

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);
}
}

主类:

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();
}
}

最佳答案

Is there something I'm doing wrong here?

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

问题包括:

  • 尝试直接在 JFrame 中绘制 - 切勿这样做,而是在 JPanel 中绘制。
  • 在组件上调用getGraphics()以获取图形资源。这将导致您获得不稳定且短暂的 Graphics 对象,从而导致绘画失败或 NullPointerExceptions
  • 未使用适当的绘画方法进行绘画。
  • 您在绘图方法参数中使用 int 文字而不是 int 变量,这使得您所做的任何绘图都是固定的 - 您永远无法移动或更改它。

相反,我建议您:

  • 创建一个扩展 JPanel 的类并在该类中进行绘制。
  • 在此类的 protected void PaintComponent(Graphics g) 方法中进行绘制。
  • 不要忘记在覆盖中调用 super 的paintComponent方法,以便您的GUI清除所有脏像素。
  • 然后将该 JPanel 放入需要显示它的 JFrame 中。
  • 对大多数绘图方法参数使用 int 字段(变量)而不是 int 文字(所谓的“魔数(Magic Number)”),以便在程序运行时可以根据需要更改绘图。
  • 最重要的是,阅读并学习标准 Swing 图形教程。

资源:

关于java - 与其他类(class)一起绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41072277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com