调用方法来绘制JFrame

时间:2023-02-09 16:18:55

Can somebody explain to me why this isn't working? The error seems to be inside the Gen class but I think it may something to do with BoxMan. The error says cannot find symbol- variable g. I also tried putting in ints and doubles but it gives me: Required (Java.awt.Graphics) Found(int) / (double). So how can fix this? I've looked everywhere and can't find the answer. Help a beginner!

有人可以向我解释为什么这不起作用?错误似乎在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 个解决方案

#1


1  

The Graphics object isn't declared anywhere. If you want to draw on your JPanel you should rather create a class extending JPanel and there add draw() method which will get an "automated" Graphics object.

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

Eventually you can create your own Graphics object but you didn't do that anywhere in that code. Your BoxMen class is very messy. You have to decide if you use Graphics object argument under paint() method or declare it yourself. I'm assuming you try the second one, if so, you should change the g to a (there isn't a g variable anywhere in BoxMen class). You can also get rid of the field g2 and use a local variable instead.

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

The error pops up because Java doesn't know what you mean by g (it isn't declared anywhere). It depends on you if you want to use the JPanel's Graphics or your own.

弹出错误是因为Java不知道你的意思是g(它没有在任何地方声明)。如果您想使用JPanel的图形或您自己的图形,这取决于您。

#2


2  

Rather then repeating what Jantomedes has already said (which is all excellent), I'm going to expand on it...

而不是重复Jantomedes已经说过的话(这一切都非常好),我将扩展它...

Painting in AWT and Swing is done through the paint sub system. This system makes decision about what and when to paint and calls the appropriate methods to update the components on the screen.

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

See Painting in AWT and Swing for more details

有关详细信息,请参阅AWT和Swing中的绘画

Graphics is an abstract concept in Java and is used to standardise the concept of painting to a variety of possible outputs, including the screen, image and printers. Apart from images, you can't create your own Graphics context, you need it to be supplied by the system

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

Check out Perfoming Custom Painting in Swing for details

有关详细信息,请查看Swing中的Perfoming Custom Painting

#1


1  

The Graphics object isn't declared anywhere. If you want to draw on your JPanel you should rather create a class extending JPanel and there add draw() method which will get an "automated" Graphics object.

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

Eventually you can create your own Graphics object but you didn't do that anywhere in that code. Your BoxMen class is very messy. You have to decide if you use Graphics object argument under paint() method or declare it yourself. I'm assuming you try the second one, if so, you should change the g to a (there isn't a g variable anywhere in BoxMen class). You can also get rid of the field g2 and use a local variable instead.

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

The error pops up because Java doesn't know what you mean by g (it isn't declared anywhere). It depends on you if you want to use the JPanel's Graphics or your own.

弹出错误是因为Java不知道你的意思是g(它没有在任何地方声明)。如果您想使用JPanel的图形或您自己的图形,这取决于您。

#2


2  

Rather then repeating what Jantomedes has already said (which is all excellent), I'm going to expand on it...

而不是重复Jantomedes已经说过的话(这一切都非常好),我将扩展它...

Painting in AWT and Swing is done through the paint sub system. This system makes decision about what and when to paint and calls the appropriate methods to update the components on the screen.

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

See Painting in AWT and Swing for more details

有关详细信息,请参阅AWT和Swing中的绘画

Graphics is an abstract concept in Java and is used to standardise the concept of painting to a variety of possible outputs, including the screen, image and printers. Apart from images, you can't create your own Graphics context, you need it to be supplied by the system

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

Check out Perfoming Custom Painting in Swing for details

有关详细信息,请查看Swing中的Perfoming Custom Painting