java代码移动圆圈位置 java代码移动圆圈位置不变

用Java做一个动画,让一个圆由小变大,位置与颜色随机,直径到200返回重绘

1、先要知道怎么画圆

成都创新互联专业为企业提供新吴网站建设、新吴做网站、新吴网站设计、新吴网站制作等企业网站建设、网页设计与制作、新吴企业网站模板建站服务,十多年新吴做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

2、设置画笔的位置

3、定时器不断改变圆的半径,重绘

4、改变半径之后,判断是否超过200

5、超过200,改变圆心位置,重新绘制圆

Java 坐标内2点做2个圆的问题

会有点小BUG:我这里只是示范了用鼠标点击 使得一个圆移动位置 其他都写在main函数里 你的getDistance()方法我实在不知道你什么意思。。。

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Point;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JFrame;

import javax.swing.JPanel;

/*

* Classname: drawyuan.java

*

* Author: zenglulin

*

* Version information: V1.0

*

* Date: 2010-6-7

*

* Copyright notice: Copyright (c) 2009, Openmobi Co.Ltd. All rights reserved.

*

* Description: TODO

*/

/**

* @author zenglulin

*

*/

public class drawyuan

{

/**

*

*/

public drawyuan()

{

// TODO Auto-generated constructor stub

}

/**

* TODO

* @param args

* return: void

* author: zenglulin

* time: 上午10:11:33

*/

public static void main(String[] args)

{

// TODO Auto-generated method stub

MyFrame frame = new MyFrame("yuanceshi");

frame.Yuan1.move(frame.p3);

frame.Yuan2.move(frame.p4); //程序里直接移动

System.out.println("圆1的直径是:" + frame.Yuan1.getDiameter());

System.out.println("圆2的直径是:" + frame.Yuan2.getDiameter());

if(frame.Yuan1.hasintersection(frame.Yuan2))

System.out.println("圆1和圆2相交");

else {

System.out.println("圆1和圆不相交");

}

if(frame.Yuan1.smaller(frame.Yuan2) 0)

System.out.println("圆1比圆2小 ");

else if(frame.Yuan1.smaller(frame.Yuan2) 0)

System.out.println("圆1比圆2大 ");

else

System.out.println("圆1和圆2大小相等 ");

}

}

class MyFrame extends JFrame

{

/* serialVersionUID: long*/

private static final long serialVersionUID = 1L;

public MyFrame(String title)

{

super(title);

init();

JPanel p =new JPanel();

Container c = getContentPane();

c.add(p);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//点击鼠标移动圆

addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent event)

{

Point p = event.getPoint();

Yuan1.move(p);

if(Yuan1.hasintersection(Yuan2))

System.out.println("圆1和圆2相交");

else {

System.out.println("圆1和圆不相交");

}

repaint();

// validate();

}

});

setSize(200, 100);

d = getSize();

p3 = new Point(61, d.height /2 + 10 );

p4 = new Point(105, d.height /2+ 10);

setVisible(true);

repaint();

validate();

}

public void init()

{

p1 = new Point(30, 30);

p2 = new Point(95, 30);

r1 = 20;

r2 = 25;

Yuan1 = new Yuan(p1, r1);

Yuan2 = new Yuan(p2, r2);

}

public void update(Graphics g)

{

Yuan1.draw(g);

Yuan2.draw(g);

}

public void paint(Graphics g)

{

super.paintComponents(g);

Yuan1.draw(g);

Yuan2.draw(g);

}

Point p1,p2,p3,p4;

int r1,r2;

Yuan Yuan1,Yuan2;

Dimension d;

}

class Yuan

{

public Yuan(Point p, int r)

{

this.point = p;

this.radius = r;

}

private int radius; //半径

public int getRadius()

{

return radius;

}

public void setRadius(int radius)

{

this.radius = radius;

}

public Point getPoint()

{

return point;

}

public void setPoint(Point point)

{

this.point = point;

}

public void move(Point point)

{

setPoint(point);

}

/**

* TODO 我不知道你说的这个距离是什么意思

* @param other

* @return

* return: int

* author: zenglulin

* time: 上午10:26:45

*/

public int getDistance (Yuan other)

{

return 0;

}

public boolean hasintersection(Yuan other)

{

return (int)getPoint().distance(other.getPoint())

radius + other.getRadius();

}

public int getDiameter() //获得直径

{

return 2* radius;

}

/**

* TODO 比较大小

* @param other

* @return

* return: int -1 当前圆更小 1--当前圆更大 0 相等

* author: zenglulin

* time: 上午10:27:21

*/

public int smaller(Yuan other)

{

// TODO Auto-generated method stub

if(radius other.getRadius())

return -1;

else if(radius other.getRadius())

return 1;

else

return 0;

}

public void draw(Graphics g)

{

g.drawOval((int)point.getX() - radius, (int)point.getY() - radius, 2*radius, 2*radius);

}

private Point point; //圆心坐标点

}

JAVA中如何通过鼠标拖拽画椭圆

写一个鼠标事件处理程序,当鼠标按下时记录下所在位置,当松开时记录下所在位置,2点就都得到了。如果想实现拖曳的效果,那么当鼠标按下时就开始,每隔一段时间记录鼠标所在位置,根据2点画椭圆,直到鼠标松开为止,获得最终椭圆

2点确定椭圆和2点确定矩形是一样的,这个椭圆就是被这个矩形包围的最大椭圆,矩形宽为椭圆短轴,长为长轴,矩形中心为椭圆圆心。

Java如何实现单击一次鼠标,就在鼠标位置出现一个圆

用JFrame做;

实现重绘repaint方法;

drawCircle方法即可。

例如如下例子:

public class Draw extends JFrame {

private int x, y;

boolean isVisible = false;

public Draw () {

addHandler();

setSize(500, 500);

setLocation(350, 150);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new Draw ();

}

private void addHandler() {

addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON1) {

x = e.getX();

y = e.getY();

isVisible = true;

repaint();

} else if (e.getButton() == MouseEvent.BUTTON3) {

isVisible = false;

repaint();

}

}

});

}

public void paint(Graphics g) {

super.paint(g);

if(isVisible){

g.setColor(Color.red);

g.drawOval(x, y, 100, 100);

}

}

}

swing求助啊!!! 我在JPanel中绘制了一个圆形 ,我现在想让它按一个轨迹自动移动,应该怎么做啊!

这个问题稍微复杂,不是一时半会能说清的。

你可以看看 网易公开课——《编程方法》,一定能解决你的问题,一定能。但是你要沉下心来仔细看,对你编程素养的提高大有帮助。

只要思路的话,请看

当你了一个轨迹,执行循环:

每次移动一小步;

循环结束

翻译成计算机算法

while(条件){ //这其实是个动画,所以要连续移动多步,while的作用在于此

move(dx,dy); // move(dx,dy)是 你自己编写的函数,让圆在 x、y方向上分别移动dx和dy个像素

dx = ?

dy = ? //dx 和 dy发生变化,至于怎么变化要看你需要什么轨迹

}

其实也挺简单的,语言细节绝非编程本质,程序的本质是人类世界在电脑中的模拟。先认清楚本质是什么再去编程。


网站标题:java代码移动圆圈位置 java代码移动圆圈位置不变
链接分享:http://azwzsj.com/article/doceojo.html