推荐一个方法,你试试,首先先用java的Graphics类画一个月亮,然后使用Graphics2D的translate(int dx, int dy)的方法,参数是新点的坐标,然后在新的位置重新画月亮
创新互联专注于企业成都全网营销、网站重做改版、利州网站定制设计、自适应品牌网站建设、H5响应式网站、商城开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为利州等各大城市提供网站开发制作服务。
给你写了个简单的测试,基本能实现你所描述的
package com.bobo.thread;
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame implements Runnable {
static int i = 10;
static int j = 440;
public Test() {
this.setSize(500, 500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, 500, 500);
g.setColor(Color.white);
g.fillOval(i, j, 60, 60);
g.setColor(Color.BLACK);
g.fillOval(i - 20, j - 20, 60, 60);
}
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i = 155) {
i += 5;
j += 15;
}
if (i 155) {
i += 5;
j -= 15;
}
if (i = 305) {
i = 10;
j = 440;
}
System.out.println(i + " " + j);
this.repaint();
}
}
public static void main(String args[]) {
new Thread(new Test()).start();
}
}
import java.util.Scanner;
public class Test implements Cloneable {
public int a;
public static void main(String agrs[]) throws MonthException, DayException {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入一个日期,格式为:MM/dd (例如:12/30)");
try {
System.out.println(new Test().format(sc.next()));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
public String format(String date) throws MonthException, DayException {
// 先用正则表达式,以确定输入是1~2位数字+/+1~2位数字的情况,排除掉不正规的输入,同时防止,之后转int型出错的情况
if (!date.matches("\\d{1,2}/\\d{1,2}")) {
throw new FormatException("输入格式必须是12/12的格式");
}
int month = Integer.parseInt(date.substring(0, date.indexOf('/')));
int day = Integer.parseInt(date.substring(date.indexOf('/') + 1));
// 常规判断
if (month 1 || month 12) {
throw new MonthException("1年中没有" + day + "月");
}
if (day 1 || month 31) {
throw new MonthException("1月中没有" + day + "日");
}
// 当然 还有代码比较优美的算法
// 大、小月
int[] dayBoundary = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 月份英文 描述
String[] monthName = { "January", "Februay", "March", "April", "May",
"June", "July", "August", "September", "October", "November",
"December" };
if (day dayBoundary[month - 1]) {
throw new DayException(monthName[month - 1] + "月没有" + day + "日");
}
// 这个是日的号数不足2位补0的情况,如果不需要补,则直接返回return monthName[day - 1] + " " + day
// +"日";
return monthName[month - 1] + " " + (day 10 ? "0" + day : day) + "日";
// 当然,还有高效的写法,就是for循环,或者switch 并且如果是JDK1.7的话,已经直接支持switch中用字符串了,这里就不举例了。
}
class FormatException extends RuntimeException {
public FormatException(String msg) {
super(msg);
}
}
class MonthException extends RuntimeException {
public MonthException(String msg) {
super(msg);
}
}
class DayException extends RuntimeException {
public DayException(String msg) {
super(msg);
}
}
}
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer s=new StringBuffer("近来天气不太好,有时几天都见不到月亮。可今天却是明月当空,青天万里无云");
StringBuffer s1=new StringBuffer("明月当空,青天万里无云");
s=s.delete(s.lastIndexOf("明月当空,青天万里无云"),s.length());//将“明月当空,青天万里无云”取出,存到StringBuffer s1中。
System.out.println(s);
s1=s1.delete(3,s1.length());//删除s1从第三个字符开始的所有字符。
System.out.println(s1);
StringBuffer s2=new StringBuffer(s.substring(7,10));//取s的一个子串s2(从第7个开始取出3个字符)。
System.out.println(s2);
s2.reverse();//将子串s2反转。
System.out.println(s2);
s1.append(s2);//将s2添加到s1的后面。
System.out.println("字符串'"+s1+"'的长度是:"+s1.length());//计算新字符串的长度L,并打印出结果。
}
}
结果是:
近来天气不太好,有时几天都见不到月亮。可今天却是
明月当
,有时
时有,
字符串'明月当时有,'的长度是:6
public void draw(Graphics2D g) {
g.setColor(color);//设置颜色
g.setStroke(stroke);//宽度
int x, y, w, h;
if (startX endX) {//以下的startx 、endx都是由鼠标拖 动事件得到
x = endX;
w = startX - endX;
} else {
x = startX;
w = endX - startX;
}
if (startY endY) {
y = endY;
h = startY - endY;
} else {
y = startY;
h = endY - startY;
}
g.drawOval(x, y, w, h);
}