import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class GraphicsTest
{
public static void main(String[] args)
{
new GraphicsFrame();

}
}
class GraphicsFrame extends JFrame
{
public void GraphicsFrame() {
setTitle("DrawTesting");
setSize(500,500);
setLocationByPlatform(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
GraphicsComponent gc = new GraphicsComponent();
add(gc);
}

}
class GraphicsComponent extends JComponent
{
public void paintComponent(Graphics g)
{
g.drawString("This is Java Testing",10,15);
g.drawRect(10,20,50,20);
g.fillRect(70,20,50,20);

Graphics2D g2 = (Graphics2D)g;//类型转换
Rectangle2D rect1 = new Rectangle2D.Double(10,50,50,20);
g2.draw(rect1);
Rectangle2D rect2 = new Rectangle2D.Double(70,50,50,20);
g2.fill(rect2);
}
}-----------------------------
上面的程序编译可以通过,但是运行的时候,却不会有图形显示出来,
但是把红色字体那行void去掉后,编译可以通过,图形也可以正常的显示出来, 这应该是正确的。但是我不明白,这里为什么不需要使用void ?
而在GraphicsComponent 类的构造函数中, 为什么必须要加void?
这两个有什么区别?

解决方案 »

  1.   

    GraphicsComponent 类的构造函数中, 哪里加了void?
    LZ看仔细啊,那个是普通方法。
      

  2.   

    楼主希望你不是开玩笑。GraphicsComponent 类没有显示的声明构造方法啊。构造方法不能有返回值,并且名字要跟类名一样
      

  3.   

    LZ你那个public void GraphicsFrame() { 是构造方法吧 
     构造方法是不能又返回值的哦  如果你想这样写的话 你可以在声明类的时候听一个  不过那就不是构造方法了 不过这样不会影响你的程序执行!
      

  4.   

    构造方法不能有返回值,并不代表可以返回void类型的~基础呀~楼主
      

  5.   

    这是构造方法,构造方法是没有返回值,也不用带void,这是规定
      

  6.   

    非常感谢 各位,本人是超级新手,刚接触java不到一月,正在努力学习中.
    看到各位回复后,我去查了一下资料,
    构造方法与其它方法的区别:
    1: 构造方法的名称必须与类名相同
    2: 构造方法不能有返回值
    3: 用户不能直接调用构造方法,必须通过关键字new自动调用它.
    非常非常感谢各位!