gpt4 book ai didi

JAVA - 帮助在扩展 Canvas 上绘图

转载 作者:行者123 更新时间:2023-11-29 03:16:35 24 4
gpt4 key购买 nike

所以,我有一个名为 MainClass 的类,其中扩展了 Canvas。我试图让我们说在 Canvas 上绘制一个填充的矩形而不覆盖 paint 方法。有没有办法做到这一点,或者我必须重写 paint 方法并将我想要绘制的所有内容都放在那里?

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

import javax.swing.JFrame;


public class MainClass extends Canvas {
MainClass()
{
JFrame MainWindow = new JFrame("Main Window");
MainWindow.setVisible(true);
MainWindow.setSize(500, 500);
MainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainWindow.add(this);
}

public void paint(Graphics g)
{
super.paint(g);
}

public static void main(String[] args)
{
MainClass temp = new MainClass();

Graphics g = (Graphics2D)temp.getGraphics();
g.setColor(Color.red);
g.fillRect(0, 0, 400, 400);
temp.repaint();
}
}

想法是我有这个类,我可以获取 Canvas 的图形对象并直接在其上绘制并重新绘制。或者,也许我正在考虑将形状和对象传递到一种方法中,该方法会为我在特定位置进行绘画。

最佳答案

  1. 不要使用 Canvas 。
  2. 改为扩展 JPanel
  3. 并重写 JPanel 的 paintComponent 方法,而不是 paint 方法(为什么不重写这些方法?您反对在其中绘画的原因是什么?)。
  4. Google Java Swing 绘图教程并通读。 Here's the link .
  5. 通过在组件上调用 getGraphics(),您将获得一个短暂的 Graphics 上下文,该上下文可能在当时正常工作,但如果发生任何重绘(并且这些不是在你的控制之下),导致程序图形失败或 NullPointerException。你应该避免这样做,除非你有迫切需要并且知道你在做什么。要“知道自己在做什么”,请阅读这本书 Filthy Rich Clients由 Haase 和 Guy 撰写。
  6. 请注意,您始终可以使用从图像派生的 Graphics 对象直接在 BufferedImage 上绘制,但是您仍然应该在 paintComponent(...) 方法重写中绘制 BufferedImage。<

关于JAVA - 帮助在扩展 Canvas 上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226136/

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