?? clockcanvas.java.bak
字號:
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.util.Timer;
import java.util.Random;
import java.awt.event.*;
import java.awt.event.MouseMotionListener;
class ClockCanvas extends JPanel //clockcanvas
{
static int seconds = 0;
private final int wild=600,length=600;
private int cx=160,cy=65,cr=60,hr=(int)(cr/3+10),mr=hr+10,sr=mr+15;
private int dx=0,dy=0;
private Timer timer;
private Random Creator;
private String c=new String("北京時間:"),tz=new String("GMT+8");
private String time;
private int h,m,s;
private GregorianCalendar calendar;
private Color scolor=Color.black;
public JButton magify,dwindle;
private JLabel label;
//構造函數
public ClockCanvas()
{
Creator=new Random();
calendar = new GregorianCalendar(TimeZone.getTimeZone(tz));
//在具有默認語言環境的給定時區內構造一個基于當前時間的 GregorianCalendar。
//GregorianCalendar類只是程序開始的時間,不會向后數。
h=calendar.get(Calendar.HOUR);
m=calendar.get(Calendar.MINUTE);
s=calendar.get(Calendar.SECOND);
time=new String(c+h+':'+m+':'+s);/**/
seconds = h* 60 * 60+ m* 60+ s;
timer = new Timer(); //計時器
timer.schedule(new MyTask(),1,1000);
magify=new JButton("放大");//設置按鈕,,,標簽
dwindle=new JButton("縮小");
label=new JLabel(time);
ButtonListener listener=new ButtonListener();
magify.addActionListener(listener);
dwindle.addActionListener(listener);
setLayout(new GridLayout(0,1));//布局管理器
setBorder(BorderFactory.createEmptyBorder(0,wild,0,0));
add(magify);
add(dwindle);
add(label);
//addMouseMotionListener(new DotsListemer()); 想做到鼠標拖動的效果,但不行
addMouseListener(new DotsListemer());
setPreferredSize(new Dimension(wild+100,length));
}
//繪制鐘面
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(scolor);
g.drawOval(cx-cr,cy-cr, 2*cr, 2*cr);
g.drawOval(cx-cr+1,cy-cr+1, 2*(cr-1), 2*(cr-1));
g.drawLine(cx,cy-cr,cx,cy-sr);
g.drawLine(cx+cr,cy,cx+sr,cy);
g.drawLine(cx,cy+cr,cx,cy+sr);
g.drawLine(cx-cr,cy,cx-sr,cy);
//分離時間
//時針和分針都是根據秒數決定角度
double hourAngle = 2 * Math.PI
* (seconds - 3 * 60 * 60) / (12 * 60 * 60);
double minuteAngle = 2 * Math.PI
* (seconds - 15 * 60) / (60 * 60);
double secondAngle = 2 * Math.PI
* (seconds - 15) / 60;
g.drawLine(cx, cy-1, cx + (int)(hr* Math.cos(hourAngle)), //hour -1
cy-1 + (int)(hr * Math.sin(hourAngle)));
g.drawLine(cx, cy, cx + (int)(hr* Math.cos(hourAngle)),// hour 0
cy + (int)(hr * Math.sin(hourAngle)));
g.drawLine(cx, cy+1, cx + (int)(hr* Math.cos(hourAngle)), //hour +1
cy+1 + (int)(hr * Math.sin(hourAngle)));
g.drawLine(cx, cy-2, cx + (int)(hr* Math.cos(hourAngle)), //hour -2
cy-2 + (int)(hr * Math.sin(hourAngle)));
g.drawLine(cx, cy+2, cx + (int)(hr* Math.cos(hourAngle)), //hour +2
cy+2 + (int)(hr * Math.sin(hourAngle)));
g.drawLine(cx, cy, cx + (int)(mr* Math.cos(minuteAngle)),//minute 0
cy + (int)(mr * Math.sin(minuteAngle)));
g.drawLine(cx, cy-1, cx + (int)(mr* Math.cos(minuteAngle)), //minute -1
cy-1 + (int)(mr * Math.sin(minuteAngle)));
g.drawLine(cx, cy, cx + (int)(sr* Math.cos(secondAngle)), //second
cy + (int)(sr * Math.sin(secondAngle)));
g.drawLine(0,length,wild,length);//畫邊界
g.drawLine(wild,0,wild,length);
label.setText(time);
}
public class MyTask extends java.util.TimerTask
{
public void run()
{
seconds++;
cx+=Creator.nextInt(5)+dx;
cy+=Creator.nextInt(5)+dy;
if(cx<=cr){cx=cr;dx=0;}
else if(cx>=wild-cr){cx=wild-cr;dx=-5;}
if(cy<=cr){cy=cr;dy=0;}
else if(cy>=length-cr){cy=length-cr;dy=-5;}
s++;
if (s==60)
{
m++;
s=0;
}
if (m==60)
{
h++;
m=0;
}
if (h==24)
{
h=0;
}
time=new String(c+h+':'+m+':'+s);
repaint();
}
}
private class DotsListemer implements java.awt.event.MouseListener
{
public Point dot;
public double dst;
public void mousePressed(MouseEvent e)
{
dot=e.getPoint();
if((dot.x<=wild-cr||dot.x>=cr)&&(dot.y<=length-cr||dot.y>=cr))
{
cx=dot.x;
cy=dot.y;
scolor=Color.green;
repaint();
}
}
public void mouseClicked (MouseEvent e){}
public void mouseReleased (MouseEvent e)
{scolor=Color.red;repaint();}
public void mouseEntered (MouseEvent e)
{
scolor=Color.pink;repaint();
}
public void mouseExited (MouseEvent e)
{
scolor=Color.black;repaint();
}
}
private class ButtonListener implements ActionListener//Button事件
{
public void actionPerformed(ActionEvent event)
{
if(event.getSource()==magify)
{
cr*=2;
if(cr>=(wild+length/4))cr=150;
hr=(int)(cr/3+10);mr=hr+10;sr=mr+15;
}
else if(event.getSource()==dwindle)
{
cr=(int)(cr/2);
if(cr<=2)cr=2;
hr=(int)(cr/3+10);mr=hr+10;sr=mr+15;
}
repaint();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -