回 帖 发 新 帖 刷新版面

主题:[讨论]关于画圆的问题!!

问题1:为什么圆会在没有点击的情况下,它自己出现在左上角?
问题2:为什么画了一个圆后,如果再继续画另一圆时,刚才画的圆就不见了?
问题3:为什么我点击一下鼠标后,圆不会出现鼠标点击的位置?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class pet extends JFrame
{
       int x1,y1;
       public pet(String str)
       {
               super(str);
       } 
       public void put()
       {
               addWindowListener(new WindowAdapter()
            {
                    public void windowClosing(WindowEvent e)
                    {
                            System.exit(0);
                    }
            });
            addMouseListener(new MouseAdapter()
            {
                    public void mouseClicked(MouseEvent e)
                    {
                            x1=e.getX();
                            y1=e.getY();                  
                            repaint();
                    }
            });
            man m=new man();
            add(m);
      }      
      public static void main(String[] args)
      {
            pet p=new pet("nihao");
            p.setSize(600,400);
            p.setLocation(180,180);
            p.put();
            p.setVisible(true);
      }
      class man extends JPanel
      {   
          public void paintComponent(Graphics g)
          {
                super.paintComponent(g);
                g.fillOval(x1,y1,50,50);
           }
       }   
}

回复列表 (共1个回复)

沙发

偶来混分吃:

1。因为你覆盖了paint()方法,你知道一开始执行程序的时候,就会调用paint()方法来绘制组件,就是这里执行了你的g.fillOval(x1,y1,50,50)等价于g.fillOval(0,0,50,50);所以就会有个圆出来了。

2。点鼠标后你是在actionPerformed()里调用了repaint()就是说会重新调用paint()方法,等价于重新绘制组件,好这个时候你的x1,y1变了,所以就会在别的地方画圆了。注意从新绘制组件哦!!!

3。要知道这个函数fillOval(x1,y1,x2,y2)函数的 四个参数意思哦,看自己的SDK哦。他是以x1,y1为左上角,然后宽高X2,Y2的矩形的填充外接指定矩形框的椭圆
。我改了下,发下还是有点误差!!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class pet extends JFrame
{
       int x1,y1;
       public pet(String str)
       {
               super(str);
       } 
       public void put()
       {
               addWindowListener(new WindowAdapter()
            {
                    public void windowClosing(WindowEvent e)
                    {
                            System.exit(0);
                    }
            });
            addMouseListener(new MouseAdapter()
            {
                    public void mouseClicked(MouseEvent e)
                    {
                            x1=e.getX()-50;
                            y1=e.getY()-50;                  
                            repaint();
                    }
            });
            man m=new man();
            add(m);
      }      
      public static void main(String[] args)
      {
            pet p=new pet("nihao");
            p.setSize(600,400);
            p.setLocation(180,180);
            p.put();
            p.setVisible(true);
      }
      class man extends JPanel
      {   
          public void paintComponent(Graphics g)
          {
                super.paintComponent(g);
                g.fillOval(x1,y1,100,100);
           }
       }   
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册