📄 clockpanel.java
字号:
import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.image.BufferedImage;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.JLabel;
import java.awt.Dimension ;
import java.awt.BorderLayout ;
import java.awt.FlowLayout ;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class ClockPanel extends JPanel
{
private Canvas m_DrawPanel = new Canvas();
private Graphics g = null;
private Graphics gBuf = null;
private int m_CenterX = 450 / 2;
private int m_CenterY = 450 / 2;
private int m_Hour;
private int m_Minute;
private int m_Second;
private static int Hour = 0 ;
private static int Minute = 0 ;
private static int Second = 0 ;
private JButton Setbutton = new JButton( "设置时间" );
private double m_dHourAngle;
private double m_dMinuteAngle;
private double m_dSecondAngle;
BasicStroke m_SecondStoke = new BasicStroke(2);
BasicStroke m_MinuteStoke = new BasicStroke(3);
BasicStroke m_HourStoke = new BasicStroke(5);
private Font font = new Font("Serif", Font.BOLD, 30);
private Font oldFont = null;
private BufferedImage m_BufImage = new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB);
private GregorianCalendar m_GCalendar = new GregorianCalendar(Locale.CHINESE);
public ClockPanel()
{
this.initFrame();
}
private void initFrame()
{
this.setLayout(null);
setSize(600,600);
this.m_DrawPanel.setSize(500, 500);
this.add(this.m_DrawPanel);
Setbutton.setBounds(180,500,100,30);
this.add(Setbutton);
validate();
Setbutton.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
Setbutton_actionPerformed(e);
}
});
Thread t = new Thread(new UpdateThread());
t.setDaemon(true);
t.start();
}
public void setMainG()
{
g = m_DrawPanel.getGraphics();
gBuf = m_BufImage.getGraphics();
}
private void updateDrawClock()
{
if(gBuf != null)
{
Color c = gBuf.getColor();
gBuf.setColor(this.getBackground());
gBuf.fillRect(0, 0, 500, 500);
gBuf.setColor(c);
this.drawClock();
}
}
public void drawClock()
{
if(g != null)
{
Graphics2D g2D = (Graphics2D)gBuf;
g2D.setColor(Color.black);
g2D.fillOval(m_CenterX-10, m_CenterY-10, 20, 20);
Stroke sOld = g2D.getStroke();
BasicStroke dotted = new BasicStroke(5, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 2, new float[]{3,10}, 0);
Color cOld = g2D.getColor();
g2D.setColor(Color.black);
g2D.setStroke(dotted);
g2D.drawOval(100, 100, 250, 250);
oldFont = g2D.getFont();
g2D.setFont(font);
g2D.setColor(Color.pink);
g2D.drawString("12", 210,105);
g2D.drawString("3", 345, 233);
g2D.drawString("6", 218, 355);
g2D.drawString("9", 95, 233);
g2D.setFont(new Font("Serif", Font.BOLD, 30));
g2D.setColor(Color.GREEN);
g2D.drawString("JAVA模拟时钟", 120, 310);
this.m_GCalendar.setTime(new Date());
int secondSum = (this.m_GCalendar.get(Calendar.HOUR_OF_DAY)+Hour)*60*60+
(this.m_GCalendar.get(Calendar.MINUTE)+Minute)*60+
(this.m_GCalendar.get(Calendar.SECOND)+Second);
this.m_dHourAngle = 2 * Math.PI * (secondSum - 3 * 60 * 60) / (12 * 60 * 60);
this.m_dMinuteAngle = 2 * Math.PI * (secondSum - 15 * 60) / (60 * 60);
this.m_dSecondAngle = 2 * Math.PI * (secondSum - 15) / 60;
g2D.setStroke(m_SecondStoke);
g2D.setColor(Color.red);
g2D.drawLine(m_CenterX,
m_CenterY,
m_CenterX + (int)(115*Math.cos(m_dSecondAngle)),
m_CenterX + (int)(115*Math.sin(m_dSecondAngle)));
g2D.setStroke(m_MinuteStoke);
g2D.setColor(Color.cyan);
g2D.drawLine(m_CenterX,
m_CenterY,
m_CenterX + (int)(95*Math.cos(m_dMinuteAngle)),
m_CenterX + (int)(95*Math.sin(m_dMinuteAngle)));
g2D.setStroke(m_HourStoke);
g2D.setColor(Color.magenta);
g2D.drawLine(m_CenterX,
m_CenterY,
m_CenterX + (int)(75*Math.cos(m_dHourAngle)),
m_CenterX + (int)(75*Math.sin(m_dHourAngle)));
g2D.setFont(new Font("Serif", Font.BOLD, 25));
g2D.setColor(Color.blue);
g2D.drawString(this.m_GCalendar.get(Calendar.YEAR) + "-"
+ this.m_GCalendar.get(Calendar.MONTH) + "-"
+ this.m_GCalendar.get(Calendar.DATE) + " "
+ (this.m_GCalendar.get(Calendar.HOUR_OF_DAY) +Hour) + ":"
+ (this.m_GCalendar.get(Calendar.MINUTE)+Minute) + ":"
+ (this.m_GCalendar.get(Calendar.SECOND)+ Second)
, 110, 390);
g2D.setFont(oldFont);
g2D.setStroke(sOld);
g2D.setColor(cOld);
}
g.drawImage(m_BufImage, 0, 0, this);
}
class UpdateThread implements Runnable
{
public void run()
{
while(true)
{
updateDrawClock();
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
public void Setbutton_actionPerformed(ActionEvent e)
{
int hour1 , minute1 ,second1 ;
String time ;
time = JOptionPane.showInputDialog( "请输入设置时间(24小时制),输入格式为:##:##:##" ) ;
if( time.length() !=8 )
{
JOptionPane.showMessageDialog( null ,"输入时间格式不正确,请重新输入!!" ,"Warning" ,JOptionPane.WARNING_MESSAGE) ;
}
else
{
String s1 = time.substring( 0 , 2 ) ;
String s2 = time.substring( 3 , 5 ) ;
String s3 = time.substring( 6 ) ;
hour1 = Integer.parseInt(s1) ;
minute1 = Integer.parseInt(s2) ;
second1 = Integer.parseInt(s3) ;
if( hour1>=0&&hour1<=23&&minute1>=0&&minute1<=59&&second1>=0&&second1<=59 )
{
Hour = hour1 - this.m_GCalendar.get(Calendar.HOUR_OF_DAY) ;
Second = second1 - this.m_GCalendar.get(Calendar.SECOND) ;
Minute = minute1 - this.m_GCalendar.get(Calendar.MINUTE) ;
}
else
{
JOptionPane.showMessageDialog( null ,"输入时间不正确,请重新输入!!" ,"Warning" ,JOptionPane.WARNING_MESSAGE) ;
}
}
}
public static void main(String[] args)
{
JFrame mainFrame = new JFrame();
mainFrame.setSize(500, 600);
ClockPanel cp = new ClockPanel();
mainFrame.getContentPane().add(cp);
mainFrame.setVisible(true);
cp.setMainG();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -