【问题标题】:Calling methods to draw on JFrame调用方法在 JFrame 上绘图
【发布时间】:2013-10-20 15:38:25
【问题描述】:

有人可以向我解释为什么这不起作用吗? 错误似乎在 Gen 类中,但是 我认为这可能与 BoxMan 有关。 错误说找不到符号变量 g。 我也尝试输入整数和双精度,但它给了我:必需的(Java.awt.Graphics)找到(整数)/(双精度)。那么如何解决这个问题呢?我到处找,找不到答案。帮助初学者!

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import java.lang.Object.*;

       public class JFrame_Test
{
        public static void main (String [] args)
    {
         Gen Gen= new Gen (1500,1000,"A Name"); // this gives parameters for a Jframe later.
    }
}


{
     Gen (int size1, int size2, String title)
     {
     JFrame aFrame = new JFrame (title);
     aFrame.setSize(size1,size2);
     aFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     aFrame.setVisible(true);
     //aFrame.getContentPane().add(new Canvas());
     //Was trying to get it to work with a canvas
     BoxMan.paint (g); // the error pops up here.
    }
}

public class BoxMan

{
    public Graphics2D g2;
  public void paint(Graphics a ) 
  {
     g2 = (Graphics2D) g; // i even tried declaring "g" here.
     g2.drawRect (10, 10, 200, 200); 
  }
}

【问题讨论】:

  • 您能发布如何在Gen 类中初始化g 吗?
  • "Swing 程序应该覆盖paintComponent(),而不是覆盖paint()。"—Painting in AWT and Swing: The Paint Methods
  • 你在哪里找到这个使用 Canvas 和 paint() 方法的例子。我会忽略那个教程和网站。从 Custom Painting 上的 Swing 教程开始,以获得更好的绘画方式。
  • 非常感谢您的建议。

标签: java swing graphics2d


【解决方案1】:

与其重复 Jantomedes 已经说过的话(这一切都很好),我将对其进行扩展......

AWT 和 Swing 中的绘画是通过绘画子系统完成的。该系统决定绘制什么以及何时绘制,并调用适当的方法来更新屏幕上的组件。

详情请见Painting in AWT and Swing

Graphics是Java中的一个抽象概念,用于将绘画的概念标准化为各种可能的输出,包括屏幕、图像和打印机。除了图片,不能创建自己的Graphics上下文,需要系统提供

查看Perfoming Custom Painting in Swing了解详情

【讨论】:

    【解决方案2】:

    Graphics 对象未在任何地方声明。如果你想利用你的JPanel,你应该创建一个扩展JPanel 的类,然后添加draw() 方法,该方法将获得一个“自动”Graphics 对象。

    最终您可以创建自己的Graphics 对象,但您并没有在该代码的任何地方这样做。您的BoxMen 课程非常混乱。您必须决定是在paint() 方法下使用Graphics 对象参数还是自己声明。我假设您尝试第二个,如果是这样,您应该将g 更改为aBoxMen 类中的任何地方都没有g 变量)。你也可以去掉g2这个字段,改用一个局部变量。

    弹出错误是因为 Java 不知道您所说的 g 是什么意思(它没有在任何地方声明)。这取决于你是想使用JPanelGraphics 还是你自己的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 2011-10-04
      • 2011-09-08
      • 1970-01-01
      相关资源
      最近更新 更多