定义画板为300*300,
点击鼠标,生成随机直径画一个圆
为了能显示完整的圆,做了以下限制:
private void drawingPanelClick(MouseEvent event)
{
//set an random number 25~199 as the diameter
diameter = getRandomDiameter();
localX = event.getX();
localY = event.getY();
//if width > current space set diameter= current space
if((300-localX) < diameter)
 diameter = (300 - localX);
//if height> current space set diameter=current space
if((300 - localY) < diameter)
diameter = (300 - localY);

repaint();
}
然后调用画圆函数
public void paintComponent(Graphics g)
{
g.setColor(Color.BLUE);
g.drawOval(localX,localY,diameter,diameter);
}
可运行程序后,还是有不能完全显示的圆,不知是怎么回事,高人指点一下!!!!!!!!!

解决方案 »

  1.   

    你是要在300X300的区域里,鼠标点的地方为圆心画圆吧 if((300-localX) < diameter) 只判断了原点右边是否画的下,但左边呢?
      

  2.   

    g.drawOval(localX,localY,diameter,diameter);
    这个函数中localX,localY,应该是要画的圆所在的矩形的左上角。
    怎么会是圆心呢?
      

  3.   

    没可能啊,顶多线和边缘相切的时候才会看不见.但是这圆也是全的.
    因为范围被你的两个if 限制了.做了个小测试.如下(包含注释)://<applet code=T width=300 height=300></applet>import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;public class T extends Applet
    {
    private int localX,localY,diameter;
    public void init()
    {
    setSize(300,300);
    addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent e)
    {
    localX = e.getX();
    localY = e.getY();
    diameter = (int)(Math.random()*200 + 25);

    if ((300 - localX) < diameter)
    diameter = 300 - localX;
    if ((300 - localY) < diameter)
    diameter = 300 - localY;

    repaint();
    }
    });
    }

    public void paint(Graphics g)
    {
    g.setColor(Color.BLUE);
    g.drawOval(localX,localY,diameter,diameter);
    }
    }运行:javac T.java  -> appletviewer T.java 圆很正常
      

  4.   

    我也是这样想的,可运行后,圆的显示还是不全,有时一半,有时一大半都不能显示,而且在离面板边缘画时,有时圆的半径还是很大,可用DEBUG测的时候,半径又确实被IF语句更改了,郁闷!!!!!!!!!!!!
      

  5.   

    我明白了,可能你的显示applet 的html 中 的范围没有调到300,或者比300 小
      

  6.   

    <applet code=T width=300 height=300></applet>
    这里的长宽一定要大于或等于300(在appletviewer中测试则不需要)
      

  7.   

    不是的,我建的是APPLICATION,不是APPLET