调用方法来绘制JFrame

时间:2013-10-20 15:38:25

标签: java swing graphics2d

有人可以向我解释为什么这不起作用? 错误似乎在Gen类内部但是 我认为这可能与BoxMan有关。 错误说无法找到符号变量g。 我也尝试过输入int和double,但它给了我:Required(Java.awt.Graphics)Found(int)/(double)。那怎么能解决这个问题呢?我到处寻找,找不到答案。帮助初学者!

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

2 个答案:

答案 0 :(得分:2)

而不是重复Jantomedes已经说过的话(这一切都很棒),我将继续扩展...

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

有关详细信息,请参阅Painting in AWT and Swing

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

查看Perfoming Custom Painting in Swing了解详情

答案 1 :(得分:1)

Graphics对象未在任何地方声明。如果您想在JPanel上绘图,则应该创建一个扩展JPanel的类,并添加draw()方法,该方法将获得“自动”Graphics对象。

最终,您可以创建自己的Graphics对象,但在该代码中的任何位置都没有这样做。你的BoxMen课很乱。您必须决定是否在Graphics方法下使用paint()对象参数或自行声明。我假设您尝试了第二个,如果是这样,您应该将g更改为ag类中的任何位置都没有BoxMen变量。您也可以删除字段g2并使用局部变量。

弹出错误,因为Java不知道g的含义(它没有在任何地方声明)。如果您想使用JPanel的{​​{1}}或您自己的Graphics,这取决于您。