问题
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!
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);
}
}
回答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.
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.
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.
回答2:
Rather then repeating what Jantomedes has already said (which is all excellent), I'm going to expand on it...
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.
See Painting in AWT and Swing for more details
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
Check out Perfoming Custom Painting in Swing for details
来源:https://stackoverflow.com/questions/19479305/calling-methods-to-draw-on-jframe