| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1214 人关注过本帖
标题:[求助]关于画圆的问题!!
只看楼主 加入收藏
向着梦想加速
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2007-9-18
收藏
 问题点数:0 回复次数:13 
[求助]关于画圆的问题!!

问题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);
}
}
}

[此贴子已经被作者于2007-11-9 12:56:50编辑过]

搜索更多相关主题的帖子: 鼠标 import awt pet java 
2007-11-09 12:50
csight
Rank: 1
等 级:新手上路
威 望:1
帖 子:293
专家分:0
注 册:2006-6-11
收藏
得分:0 

1.x1,y1默认的值是0,0;
2.点击repaint后全部重画,当然会没有了;
3.点击位置是园的左上角,而不是中心
改进后的程序如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class pet extends JFrame
{

public pet(String str)
{
super(str);
}
public void put()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
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
{
int x1,y1;
public man()
{
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
repaint();
}
});
}
public void paintComponent(Graphics g)
{

//如果只需要画一个就去掉这行下面的注释;
//super.paintComponent(g);
g.fillOval(x1,y1,50,50);
}
}
}


头可断,发型不可乱;血可流,皮鞋不可不擦油;
2007-11-09 13:47
csight
Rank: 1
等 级:新手上路
威 望:1
帖 子:293
专家分:0
注 册:2006-6-11
收藏
得分:0 
以点击处作为圆的中心:g.fillOval(x1-25,y1-25,50,50);

头可断,发型不可乱;血可流,皮鞋不可不擦油;
2007-11-09 13:48
向着梦想加速
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2007-9-18
收藏
得分:0 
回复:(csight)1.x1,y1默认的值是0,0;2.点击repaint...

真的很感谢你的指点!!


2007-11-09 14:46
netstriker
Rank: 1
等 级:新手上路
威 望:1
帖 子:257
专家分:0
注 册:2007-3-24
收藏
得分:0 

或者更进一肯的修改就可以了

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

class pet extends JFrame
{

public pet(String str)
{
super(str);
}
public void put()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
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
{
int x1,y1;
public man()
{
x1 = -25;
y1 = -25;
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
repaint();
}
});
}
public void paintComponent(Graphics g)
{

//如果只需要画一个就去掉这行下面的注释;
//super.paintComponent(g);
g.fillOval(x1 - 25,y1 - 25,50,50); // 把它减去半径的一半就可以了
}
}
}

2007-11-09 15:04
向着梦想加速
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2007-9-18
收藏
得分:0 
[求助]回复:(csight)1.x1,y1默认的值是0,0;2.点击repaint...

请问下面的代码为什么要放在class man中,为什么不放在class pet中??请赐教!!
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
repaint();
}
});


2007-11-09 15:42
向着梦想加速
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2007-9-18
收藏
得分:0 
回复:(netstriker) 或者更进一肯的修改就可以了...

请问下面的代码为什么要放在class man中,为什么不放在class pet中??请赐教!!
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
repaint();
}
});


2007-11-09 15:42
csight
Rank: 1
等 级:新手上路
威 望:1
帖 子:293
专家分:0
注 册:2006-6-11
收藏
得分:0 
JFrame(或其子类)最好只是充当一个载体的作用,
而真正的图形最好画在JPanel(或其子类)上,这样分离有利于维护和修改;
比如你要添加其他的画图区域时,不用在JFrame上弄来弄去,只需要
另外添加一个新的JPanel就可以了;

头可断,发型不可乱;血可流,皮鞋不可不擦油;
2007-11-09 19:27
netstriker
Rank: 1
等 级:新手上路
威 望:1
帖 子:257
专家分:0
注 册:2007-3-24
收藏
得分:0 
  嗯,严重同意楼上所以说。主要为了程序更加容易维护。
2007-11-09 19:33
向着梦想加速
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2007-9-18
收藏
得分:0 
回复:(csight)JFrame(或其子类)最好只是充当一个载...

哦,好的,那我还想问问,为什么在class pet中调用 repaint()会使先前的画的圆不见了,而在class man中调用
repaint()却又能保留那些先前画的圆,能说说 repaint()方法的具体运作过程吗?在此先谢谢了!!


2007-11-09 19:51
快速回复:[求助]关于画圆的问题!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019066 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved