使用Canvas在Java中绘图

dpp*_*dpp 14 java graphics swing canvas awt

我想用Java的Canvas绘制,但是不能让它工作,因为我不知道我在做什么.这是我的简单代码:

import javax.swing.JFrame;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Color;

public class Program
{
    public static void main(String[] args)
    {
        JFrame frmMain = new JFrame();
        frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmMain.setSize(400, 400);

        Canvas cnvs = new Canvas();
        cnvs.setSize(400, 400);

        frmMain.add(cnvs);
        frmMain.setVisible(true);

        Graphics g = cnvs.getGraphics();
        g.setColor(new Color(255, 0, 0));
        g.drawString("Hello", 200, 200);
    }
}
Run Code Online (Sandbox Code Playgroud)

窗口上没有任何内容.

我错误地认为Canvas是纸,而Graphics是我的铅笔吗?它是如何工作的?

Hov*_*els 37

建议:

  • 不要使用Canvas,因为您不应该不必要地将AWT与Swing组件混合使用.
  • 而是使用JPanel或JComponent.
  • 不要通过调用getGraphics()组件来获取Graphics对象,因为获得的Graphics对象将是瞬态的.
  • 用JPanel的paintComponent()方法绘制.
  • 所有这些都在很容易找到的几个教程中得到了很好的解释.在尝试猜测这些东西之前,为什么不先读它们呢?

关键教程链接:

  • 谢谢!我确实搜索过网络.是的,他们很容易找到,但不容易理解. (6认同)
  • 好点.但请记住,在搜索此主题时,人们也会找到您的答案.这就是为什么我认为你应该包含你提到的教程的链接. (2认同)
  • 您会因为“我想在 Java 的 Canvas 中绘图,但无法让它工作,因为我不知道自己在做什么。”而获得赞成票。*。 (2认同)

Tom*_*m G 7

您必须覆盖Canvas的paint(Graphics g)方法并在那里执行绘图.请参阅paint()文档.

如它所述,默认操作是清除画布,因此您对画布的图形对象的调用不会像您期望的那样执行.