java模拟时间修改器的实现
结合之前所学的sql数据库,本人模仿了window的时间修改机制,制作了一个模拟修改器,本人修改了很久,找不到bug了,如果哪位大牛发现bug,不吝赐教!程序运行图如下:
实现不算复杂,代码如下:
package Exercise4;
/**
* 使用说明:必须安装sql数据库,导入driver类,新建一个ctong库,库中新建exercise4的表,表的属性是:hour(int),minute(int),second(int)
* id(int,auto_increment,primary key);完成上述步骤后,自己开启sql数据库,use ctong,之后便可使用!
*/
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
public class Exercise4 extends Mysql{
//时分秒的框
private JTextField field1,field2,field3;
//hour表示当前时间,hour0用来存储时间差,hour1表示你修改后的最终时间,也是用来显示的时间
private static int hour,minute,second,hour0,minute0,second0,hour1,minute1,second1,copy_hour,copy_minute,copy_second;
private JLabel Picture;
private static boolean applyflag = false;
public Exercise4(){
final JFrame frame = new JFrame("Exercise4(Time setting)");
//北边面板
JPanel northPanel = new JPanel();
Picture = new JLabel();
northPanel.add(Picture);
//中间面板
JPanel centerPanel =createCenterPanel();
//南边面板
JPanel southPanel = new JPanel();
JButton ok = new JButton("OK");
JButton cancel = new JButton("Cancel");
JButton apply = new JButton("Apply");
ok.setMnemonic(KeyEvent.VK_ENTER);
cancel.setMnemonic(KeyEvent.VK_BACK_SPACE);
apply.setMnemonic(KeyEvent.VK_F1);
ok.setPreferredSize(new Dimension(80,30));
cancel.setPreferredSize(new Dimension(80,30));
apply.setPreferredSize(new Dimension(80,30));
ok.setBackground(new Color(0,110,255));
cancel.setBackground(new Color(0,110,255));
apply.setBackground(new Color(0,110,255));
ok.setForeground(Color.WHITE);
cancel.setForeground(Color.WHITE);
apply.setForeground(Color.WHITE);
southPanel.add(ok);
southPanel.add(cancel);
southPanel.add(apply);
//界面属性
frame.setLayout(new GridLayout(3,1));
frame.setLocation(500,200);
frame.setResizable(false);
frame.setSize(300,300);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
frame.setIconImage(new ImageIcon("321.jpg").getImage());
frame.add(northPanel);
frame.add(centerPanel);
frame.add(southPanel);
frame.setDefaultCloseOperation(3);
frame.setVisible(true);
//监听器
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addTable(getHour(), getMinute(), getSecond(),1);
timeSQL();
close0();
System.exit(0);
}
});
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(applyflag){
addTable(getHour(), getMinute(), getSecond(),1);
}
timeSQL();
close0();
System.exit(0);
}
});
apply.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
applyflag=true;
JOptionPane.showMessageDialog(null, "时间已修改");
}
});
}
//中间面板的创建函数
private JPanel createCenterPanel() {
JPanel initPanel = new JPanel();
JButton houradd = new JButton("▲");
JButton hoursub = new JButton("▼");
//快捷键,下同
houradd.setMnemonic(KeyEvent.VK_Q);
hoursub.setMnemonic(KeyEvent.VK_A);
//鼠标指针,下同
houradd.setCursor(new Cursor(12));
hoursub.setCursor(new Cursor(12));
//上下按钮面板,下同
JPanel hourPanel =new JPanel(new GridLayout(2,1));
houradd.setPreferredSize(new Dimension(40,10));
//按钮凸起,下同
houradd.setBorder(new BevelBorder(0));
hoursub.setBorder(new BevelBorder(0));
hourPanel.add(houradd);
hourPanel.add(hoursub);
JButton minuteadd = new JButton("▲");
JButton minutesub = new JButton("▼");
minuteadd.setMnemonic(KeyEvent.VK_W);
minutesub.setMnemonic(KeyEvent.VK_S);
minuteadd.setCursor(new Cursor(12));
minutesub.setCursor(new Cursor(12));
JPanel minutePanel =new JPanel(new GridLayout(2,1));
minuteadd.setPreferredSize(new Dimension(40,10));
minuteadd.setBorder(new BevelBorder(0));
minutesub.setBorder(new BevelBorder(0));
minutePanel.add(minuteadd);
minutePanel.add(minutesub);
JButton secondadd = new JButton("▲");
JButton secondsub = new JButton("▼");
secondadd.setMnemonic(KeyEvent.VK_E);
secondsub.setMnemonic(KeyEvent.VK_D);
secondadd.setCursor(new Cursor(12));
secondsub.setCursor(new Cursor(12));
JPanel secondPanel =new JPanel(new GridLayout(2,1));
secondadd.setPreferredSize(new Dimension(40,10));
secondadd.setBorder(new BevelBorder(0));
secondsub.setBorder(new BevelBorder(0));
secondPanel.add(secondadd);
secondPanel.add(secondsub);
field1 = new JTextField(2);
field2 = new JTextField(2);
field3 = new JTextField(2);
//box,用来设置组件的间距
Box baseBox = Box.createHorizontalBox();
baseBox.add(field1);
baseBox.add(hourPanel);
baseBox.add(Box.createHorizontalStrut(10));//放置透明box来表示间距
baseBox.add(field2);
baseBox.add(minutePanel);
baseBox.add(Box.createHorizontalStrut(10));
baseBox.add(field3);
baseBox.add(secondPanel);
field1.setFont(new Font(null, Font.BOLD, 18));
field2.setFont(new Font(null, Font.BOLD, 18));
field3.setFont(new Font(null, Font.BOLD, 18));
//线程,用来及时显示时间变化
Thread thread = new Thread(new Runnable() {
public void run() {
hour = new Date().getHours();
minute = new Date().getMinutes();
second = new Date().getSeconds();
SelectTables();
SelectTables1();
SelectTables0();
DelData(1);
DelData(2);
changePic();
while(true){
if(copy_hour != getHour()){
copy_hour = getHour();
if(copy_hour>60){
field1.setText("0");
}else
field1.setText(""+getHour());
}
if(copy_minute != getMinute()){
copy_minute = getMinute();
if(copy_minute>60){
field2.setText("0");
int m = getHour();
setHour(++m);
if(m>=24) setHour(0);
}
else
field2.setText(""+getMinute());
}
if(copy_second != getSecond()){
copy_second = getSecond();
field3.setText(""+ getSecond());
}
secUp();
changePic();
//休眠1秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
thread.start();
initPanel.add(baseBox);
//监听器
houradd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
houUp();
}
});
hoursub.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
houDown();
}
});
minuteadd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
minUp();
}
});
minutesub.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
minDown();
}
});
secondadd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
secUp();
}
});
secondsub.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
secDown();
}
});
return initPanel;
}
//重写get,set方法
public void setHour(int hour) {
field1.setText(""+hour);
}
public void setMinute(int minute) {
field2.setText(""+minute);
}
public void setSecond(int second) {
field3.setText(""+second);
}
public int getHour() {
if(field1.getText().isEmpty())
setHour(0);
return Integer.parseInt(field1.getText());
}
public int getMinute() {
if(field2.getText().isEmpty())
setMinute(0);
return Integer.parseInt(field2.getText());
}
public int getSecond(){
if(field3.getText().isEmpty())
setSecond(0);
return Integer.parseInt(field3.getText());
}
//以下6个方法表示相关时间的加减
public void houUp(){
int t = getHour();
setHour(++t);
if(t>=24) setHour(0);
}
public void houDown(){
if(getHour()!=0){
int t = getHour();
setHour(--t);
}else{
setHour(23);
}
}
public void minUp(){
int t = getMinute();
setMinute(++t);
if(t>=60) {
setMinute(0);
int m = getHour();
setHour(++m);
if(m>=24) setHour(0);
}
}
public void minDown(){
if(getMinute()!=0){
int t = getMinute();
setMinute(--t);
}else{
setMinute(59);
if(getHour()!=0){
int t = getHour();
setHour(--t);
}else{
setHour(23);
}
}
}
public void secUp(){
int t = getSecond();
setSecond(++t);
if(t>=60){
setSecond(0);
int k = getMinute();
setMinute(++k);
if(k>=60){
setMinute(0);
int m = getHour();
setHour(++m);
if(m>=24) setHour(0);
}
}
}
public void secDown(){
if(getSecond()!=0){
int t = getSecond();
setSecond(--t);
}else{
setSecond(59);
if(getMinute()!=0){
int t = getMinute();
setMinute(--t);
}else{
setMinute(59);
if(getHour()!=0){
int t = getHour();
setHour(--t);
}else{
setHour(23);
}
}
}
}
//改变图片
public void changePic(){
if(getHour()>=7&&getHour()<=11){
Picture.setIcon(new ImageIcon("zaoshang.jpg"));
}
else if(getHour()>11&&getHour()<=15){
Picture.setIcon(new ImageIcon("zhengwu.jpg"));
}
else if(getHour()>15&&getHour()<=18){
Picture.setIcon(new ImageIcon("huanghun.jpg"));
}
else {
Picture.setIcon(new ImageIcon("wanshang.jpg"));
}
}
//获取当前时间,并存入数据库
public void timeSQL(){
int hour = new Date().getHours();
int minute = new Date().getMinutes();
int second = new Date().getSeconds();
addTable(hour, minute, second, 2);
}
//获取时间差
public void SelectTables(){
try {
// 执行sql语句
Statement statement = con.createStatement();
String sql = "select * from exercise4";
ResultSet rs = statement.executeQuery(sql);
int hour1 = 0;
int minute1 = 0;
int second1 = 0;
int id;
while (rs.next()) {
hour1 = rs.getInt("hour");
minute1 = rs.getInt("minute");
second1 = rs.getInt("second");
id=rs.getInt("id");
if(id==2){
hour0 = Math.abs(hour - hour1);
minute0 = Math.abs(minute - minute1);
second0 = Math.abs(second - second1);
System.out.println("hour =" + hour0 + " minute=" + minute0+" second="+second0+" id="+id);
}
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取显示时间
public void SelectTables1(){
try {
// 执行sql语句
Statement statement = con.createStatement();
String sql = "select * from exercise4";
ResultSet rs = statement.executeQuery(sql);
hour1 = 0;
minute1 = 0;
second1 = 0;
int id;
while (rs.next()) {
hour1 = rs.getInt("hour");
minute1 = rs.getInt("minute");
second1 = rs.getInt("second");
id=rs.getInt("id");
if(id==1){
hour1 += hour0;
minute1 += minute0;
second1 += second0;
System.out.println("hour =" + hour1 + " minute=" + minute1+" second="+second1+" id="+id);
copy_hour = hour1;
copy_minute = minute1;
copy_second = second1;
field1.setText(""+hour1);
field2.setText(""+minute1);
field3.setText(""+second1);
}
}
rs.close();
}catch (Exception e) {
e.printStackTrace();
}
}
//对用户是否修改过时间进行判断
public void SelectTables0(){
try {
// 执行sql语句
Statement statement = con.createStatement();
String sql = "select * from exercise4";
ResultSet rs = statement.executeQuery(sql);
int n = 0;
while(rs.next()) {
n++;
}
if(n<=1){
copy_hour = hour;
copy_minute = minute;
copy_second = second;
field1.setText(""+hour);
field2.setText(""+minute);
field3.setText(""+second);
}
rs.close();
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 主函数
* @param ctong
*/
public static void main(String[] args) {
new Exercise4();
}
}
package Exercise4;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 1.增加数据-insert into game(name,type) values(?,?)
* public void dd2Table(String name,String type);
* public void add2Table(String name,String type,int id);
* 2.删除数据-delete from game where id = ?
* public void DelData(int id)
* 3.查找数据-select * from game
* public void SelectTables()
* 4.修改数据-update game set name=?,type=? where id=?
* public void upData(String name,String type,int id)
*
*
*
* @author ctong
*
*/
public class Mysql {
/*
数据库加载固定属性
*/
//mySql 中驱动类的名字就是其驱动包中的com.mysql.jdbc.Driver.class 类。
String driver="com.mysql.jdbc.Driver";
Connection con;
//jdbc:mysql://ip 地址: 端口号/数据库名字
String url="jdbc:mysql://localhost:3306/ctong";
String user="root";
//连接上数据库mysql
public Mysql()
{
try {
Class.forName(driver);
//第三个属性是密码
con=DriverManager.getConnection(url,user,"");
if(!con.isClosed())
System.out.println("连接成功");
} catch (Exception e) {
e.printStackTrace();
}
}
//在表末增加一栏数据
public void addTable(int hour,int minute , int second)
{
try {
//预处理命令添加
PreparedStatement sql;
sql = con.prepareStatement("insert into exercise4(hour,minute,second) values(?,?,?)");
sql.setInt(1,hour);
sql.setInt(2,minute);
sql.setInt(3,second);
sql.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
//增加一栏数据-----指定id
public void addTable(int hour,int minute , int second,int id)
{
try {
//预处理命令添加
PreparedStatement sql;
sql = con.prepareStatement("insert into exercise4(hour,minute,second,id) values(?,?,?,?)");
sql.setInt(1,hour);
sql.setInt(2,minute);
sql.setInt(3,second);
sql.setInt(4, id);
sql.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
//查找表中所有数据
public void SelectTables(){
try {
// 执行sql语句
Statement statement = con.createStatement();
String sql = "select * from exercise4";
ResultSet rs = statement.executeQuery(sql);
int hour = 0;
int minute = 0;
int second = 0;
int id;
while (rs.next()) {
hour = rs.getInt("hour");
minute = rs.getInt("minute");
second = rs.getInt("second");
id=rs.getInt("id");
System.out.println("hour =" + hour + " minute=" + minute+" second="+second+" id="+id);
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//删除一行数据
public void DelData(int id)
{
try {
PreparedStatement sql;
sql = con.prepareStatement("delete from exercise4 where id = ?");
sql.setInt(1,id);
sql.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
//修改一栏数据
public void upData(int hour,int minute ,int second,int id)
{
try {
PreparedStatement sql;
sql = con.prepareStatement("update exercise4 set hour=?,minute=?,second=?, where id=?");
sql.setInt(1,hour);
sql.setInt(2,minute);
sql.setInt(3,second);
sql.setInt(4, id);
sql.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
public void close0(){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
相关图片就不提供了,谢谢观看!