写了一个静态画饼分图程序,但不知道怎么改成动态分图
就是说,想用鼠标单击圆上的某一点后,
程序自动重画,
可以按单击点的坐标分成更小的块的
问题点数:10、回复次数:6Top
1 楼cds1(风雨中飘摇)回复于 2006-05-05 18:26:56 得分 0
没有人指点一下吗?
up一下先Top
2 楼UnAgain()回复于 2006-05-05 19:48:09 得分 0
首先你要监听鼠标事件。
其次要明确鼠标点的范围,比如是否在圆周上,为了方便使用,应该允许一定的偏离范围。
然后,你要计算角度,这比较麻烦。你需要根据Rantangle得出圆心,通过反三角运算得到角度。
等等,你怎么画饼?是通过Arc还是画圆后再画直线?Top
3 楼cds1(风雨中飘摇)回复于 2006-05-05 20:48:38 得分 0
我的源程序是这样的,我就是不知道要如何触发鼠标事件,以及计算角度啊
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
public class circle extends Frame
{
public circle()
{
addWindowListener(new WinClose());
}
public static void main(String[] args)
{
new circle().setVisible(true);
}
public void paint(Graphics g)
{
double PI=3.1415926;
g.setColor(Color.red);
g.fillArc(50,50,200,200,0,120);
g.setColor(Color.BLUE);
g.fillArc(50,50,200,200,120,80);
g.setColor(Color.GREEN);
g.fillArc(50,50,200,200,200,80);
g.setColor(Color.black);
g.fillArc(50,50,200,200,280,80);
g.setColor(Color.green);
g.fillArc(50,50,200,200,80,60);
}
class WinClose extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
/*public void mouseClicked(MouseEvent e)
{
x=getX();
y=getY();
repaint();
}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{}
public void mouseReleased(MouseEvent e)
{}*/
}
Top
4 楼UnAgain()回复于 2006-05-06 08:00:11 得分 10
兄弟,我只能做到这里了,其它的需要你自己琢磨了。
不过我建议你先开阔java语言、程序设计等知识面,多读一些经典的代码,别一开始就自己扎进去。
// 新增代码
final static double ox = 150.0, oy = 150.0;
final static double r = 100.0;
final static int off = 5;
// 原代码
public circle() {
addWindowListener(new WinClose());
// 新增代码
addMouseListener(
new MouseAdapter(){
public void mouseClicked(MouseEvent e){
double x = e.getX(), y = e.getY();
double dist =
java.awt.geom.Point2D.distance(x, y, ox, oy);
if ((r + off < dist) || (r - off > dist)) {
// 鼠标指针不在有效的范围内。
return;
}
// 调整坐标方向
x = x - ox; y = oy - y;
double radian = Math.atan(y/x);
double angle = 180 * radian / Math.PI;
if (x >= 0) {
if (y < 0) {
angle += 360;
}
} else {
angle += 180;
}
// 得到角度
System.out.println(angle);
}
});
}
Top
5 楼cds1(风雨中飘摇)回复于 2006-05-07 18:54:17 得分 0
太谢谢这位老兄啦,
我会认真琢磨的Top
6 楼xiachedan(瞎扯蛋)回复于 2006-05-09 17:17:14 得分 0
关注Top




