栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现火车订票系统(简单GUI界面)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现火车订票系统(简单GUI界面)

package exercise;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.*;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MainClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        WindowBoxLayout w = new WindowBoxLayout();
        w.setBounds(500, 250, 300, 200);
    }

}

class WindowBoxLayout extends JFrame implements ActionListener{
    //JPanel panel;
    Box boxH;
    Box boxV1;
    Box boxV2;
    
    Font font1=new Font("楷体",Font.PLAIN,20);
    Font font2=new Font("楷体",Font.PLAIN,25);
    JTextField j1;
    JPasswordField j2;
    Button b1,b2;
    
    WindowBoxLayoutListener listener;
    public WindowBoxLayout(){

        setLayout(new java.awt.FlowLayout());
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
    }
    void  init(){
        setTitle("山东省省内火车订票系统");
        //add(new Label("12306订票系统"));
        boxH = Box.createHorizontalBox();
        boxV1 = Box.createVerticalBox();
        boxV2 = Box.createVerticalBox();
        
        JLabel l1=new JLabel("账户");
        l1.setFont(font1);
        boxV1.add(l1);
        
        JLabel l2=new JLabel("密码");
        l2.setFont(font1);
        boxV1.add(l2);
        
        j1=new JTextField(16);
        j2=new JPasswordField(16);
        boxV2.add(j1);
        boxV2.add(j2);
        
        boxH.add(boxV1);
        boxH.add(Box.createHorizontalStrut(10));
        boxH.add(boxV2);
        add(boxH);
        boxH.add(Box.createHorizontalStrut(20));
        
        b1=new Button("确定");
        b1.setFont(font2);
        listener = new WindowBoxLayoutListener();
        listener.setWindowBoxLayout(this);
        b1.addActionListener(listener);
        add(b1);
        boxH.setBackground(Color.pink);
        
        b2=new Button("注册");
        b2.setFont(font2);
        listener = new WindowBoxLayoutListener();
        listener.setWindowBoxLayout(this);
        b2.addActionListener(listener);
        
        add(b2);
        
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }

}
class window2 extends JFrame{
    Font font;
    Box box;
    JTextField textField1;
    JPasswordField textFiled2;
    window2Listener listener=new window2Listener();
    JLabel label1,label2,label3;
    Button button1,button2;
    public window2() {
        setLayout(new java.awt.FlowLayout());
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void init(){
        font = new Font("楷体",Font.PLAIN,20);
        box = Box.createVerticalBox();
        label1=new JLabel("注册账户名:");
        label1.setFont(font);
        box.add(label1);
        box.add(Box.createVerticalStrut(12));
        
        textField1=new JTextField(16);
        box.add(textField1);
        box.add(Box.createVerticalStrut(12));
        
        label2=new JLabel("密码:");
        label2.setFont(font);
        box.add(label2);
        box.add(Box.createVerticalStrut(12));
        textFiled2 = new JPasswordField(16);
        box.add(textFiled2);
        box.add(new JLabel("(密码必须含有大小写字母,数字以及其他特殊字符,且长度大于8位且不超过16位)"));
        
        listener.setwindow2(this);
        //button.addActionListener(listener);
        box.add(Box.createVerticalStrut(30));
        button1 = new Button("确定");
        button1.setFont(font);
        button1.addActionListener(listener);
        box.add(button1);
        
        box.add(Box.createVerticalStrut(30));
        button2=new Button("返回上层");
        button2.setFont(font);
        button2.addActionListener(listener);
        box.add(button2);
        
        add(box);
    }
    
}
class WindowBoxLayoutListener implements ActionListener{
    WindowBoxLayout w;
    JPanel panel=new JPanel();
    JLabel label;
    public void setWindowBoxLayout(WindowBoxLayout w) {
        this.w=w;
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==w.b1) {
            String s1=w.j1.getText();
            String s2=w.j2.getText();
            User u=new User();
            u.setUserName(s1);
            u.setUserPwd(s2);
            Login l=new Login();
            if(l.login(u)==1) {             //返回1:账号名不存在 返回2:密码错误  返回3:登入成功
                label=new JLabel("账户名不存在");
                panel.add(label);
                w.add(panel);
                w.setVisible(true);
                
            }else if(l.login(u)==2) {
                //密码错误;
                label=new JLabel("密码错误!");
                panel.add(label);
                w.add(panel);
                w.setVisible(true);
            }else {
                //登入成功,切换界面
                w.setVisible(false);
                Window3 w3=new Window3();
                w3.setTitle("              你好,"+w.j1.getText());
                w3.setBounds(500,200,600,500);
                w3.setVisible(true);
                w3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                
            }
        }
        else if(e.getSource()==w.b2) {
            w.setVisible(false);
            window2 w2=new window2();
            w2.setBounds(500, 250, 700, 500);
        }
    }
}
class window2Listener implements ActionListener{
    window2 w2;
    boolean b1=false,b2=false;
    JLabel label;
    Font font = new Font("楷体",Font.PLAIN,25);
    public void setwindow2(window2 w) {
        this.w2=w;
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==w2.button1) {
            //账户
            if(b1==false) {
                userNameValidation user1=new userNameValidation();
                user1.setWindow(w2);
                b1=user1.test(w2.textField1.getText());
            }
            //密码
            if(b2==false) {
                userPwdValidation user2=new userPwdValidation();
                user2.setWindow2(w2);
                b2=user2.test(w2.textFiled2.getText());
            }
            if(b1==true&&b2==true) {  /注册成功
                User u=null;
                String s1=w2.textField1.getText();
                String s2=w2.textFiled2.getText();
                LocalDate ld=LocalDate.now();
                u=new User(s1,s2,String.format("%ty-&tm-%td",ld,ld,ld));
                Register r=new Register(u);
                if(r.check(u)) {
                    //    有重名
                    w2.box.add(Box.createVerticalStrut(10));
                    label=new JLabel("有重名");
                    label.setFont(font);
                    w2.box.add(label);
                    w2.setVisible(true);
                }
                else {
                    if(r.register(u))
                       //                 注册成功!
                        w2.box.add(Box.createVerticalStrut(10));
                    label=new JLabel("注册成功!");
                    label.setFont(font);
                    w2.box.add(label);
                    w2.setVisible(true);
              
                }
                
            }
        }
        else if(e.getSource()==w2.button2) {
            w2.setVisible(false);//返回上层
            WindowBoxLayout w1 = new WindowBoxLayout();
            w1.setBounds(500, 250, 300, 200);
        }
    }
}


abstract class Validation{
    String str;
    public Pattern pattern;
    Validation(String s){
        pattern =Pattern.compile(s);
    }
    boolean test(String s) {
     
    return false;
    }
}
class userNameValidation extends  Validation{
    Font font=new Font("黑体",Font.BOLD,15);
    Label label;
    window2 w;
    public void setWindow(window2 w) {
        this.w=w;
    }
    Matcher matcher;
    String str1="[A-Z]+";
    String str2="[a-z]+";
    userNameValidation(){
        super("");
    }
    boolean test(String s) {
        if(s.length()<8) {
                     //登入名小于8位
            label=new Label("                                 登入名小于8位!");
            label.setFont(font);
            
            w.box.add(label);
            w.setVisible(true);
            return false;
        }
        else if(s.length()>16) {
                   //登入名大于16位
            label=new Label("                                 登入名大于8位!");
            label.setFont(font);
            w.box.add(label);
            w.setVisible(true);
            return false;
        }
        else {
            pattern=Pattern.compile(str1);
            matcher=pattern.matcher(s);
            if(matcher.matches()) {
                  //该登入名无小写字母
                label=new Label("                                 该登入名无小写字母!");
                label.setFont(font);
                w.box.add(label);
                w.setVisible(true);
                return false;
            }
            else{pattern=Pattern.compile(str2);
            matcher=pattern.matcher(s);
            if(matcher.matches()) {
                    //该登入名无大写字母
                label=new Label("                                 该登入名无大写字母!");
                label.setFont(font);
                w.box.add(label);
                w.setVisible(true);
                return false;
            }
            else {
                    //该登入名符合命名要求
                label=new Label("                                 该登入名符合命名要求!");
                label.setFont(font);
                w.box.add(label);
                w.setVisible(true);
                return true;
//                userPwdValidation user2=new userPwdValidation();
//                user2.test(w.textFiled2.getText());
            } 
            }
        }
    }

}

class userPwdValidation extends Validation{
    Font font=new Font("黑体",Font.BOLD,15);
    window2 w=new window2();
    JLabel label;
    public void setWindow2(window2 w) {
        this.w=w;
    }
    public Pattern pattern;
    public Matcher matcher;
    String str2="[^(A-Z)]+";
    String str3="[^a-z]+";
    String str4="[a-zA-Z0-9]+";
    String str5="[^0-9]+";
    boolean bo;
    userPwdValidation(){
        super("");
    }
     boolean test(String s) {
        if(s.length()<8) {
            //该密码长度小于8
            label=new JLabel("该密码长度小于8!");
            label.setFont(font);
            w.box.add(label);
            w.setVisible(true);
            return false;
        }
        else if(s.length()>16) {
            //长度大于16
            label=new JLabel("该密码长度大于16!");
            label.setFont(font);
            w.box.add(label);
            w.setVisible(true);
            return false;
        }
        else {
            pattern=Pattern.compile(str2);
            matcher=pattern.matcher(s);
            bo=matcher.matches();
            if(bo==true) {
                //不含大写字母
                label=new JLabel("该密码不含大写字母!");
                label.setFont(font);
                w.box.add(label);
                w.setVisible(true);
                return false;
            }else {
                    pattern=Pattern.compile(str3);
                    matcher=pattern.matcher(s);
                    bo=matcher.matches();
                    if(bo==true) {
                            //不含小写字母

                        label=new JLabel("该密码不含小写字母!");
                        label.setFont(font);
                        w.box.add(label);
                        w.setVisible(true);
                        return false;
                    
                    }else {
                        pattern =Pattern.compile(str4);
                        matcher=pattern.matcher(s);
                        bo=matcher.matches();
                        if(bo==true) {
                             //不含非字母和数字的特殊字符                          
                            label=new JLabel("该密码不含非字母和数字的特殊字符!");
                            label.setFont(font);
                            w.box.add(label);
                            w.setVisible(true);
                            return false;
                        }
                        else {
                            pattern =Pattern.compile(str5);
                            matcher=pattern.matcher(s);
                            bo=matcher.matches();
                            if(bo==true) {      
                                 //不含数字

                                label=new JLabel("该密码不含数字!");
                                label.setFont(font);
                                w.box.add(label);
                                w.setVisible(true);
                                return false;
                             }
                            else {
                                //密码符合要求
                                label=new JLabel("该密码符合要求!");
                                label.setFont(font);
                                w.box.add(label);
                                w.setVisible(true);
                                return true;
                              
                        }

                    }
            }
        
            
        }
        
        
    }
}}

class User{
    private String userName;
    private String userPwd;
    private String regDatetime;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    public String getRegDatetime() {
        return regDatetime;
    }
    public void setRegDatetime(String regDatetime) {
        this.regDatetime = regDatetime;
    }
    User(){
        ;
    }
    
    User(String userName,String userPwd, String regDatetime){
        this.userName=userName;
        this.userPwd=userPwd;
        this.regDatetime=regDatetime;
    }
    User(String user){
        String s[]=user.split("[ ]+");
        this.userName=s[0];
        this.userPwd=s[1];
        this.regDatetime=s[2];
        
    }
    
    public String toString() {
        return this.userName+" "+this.userPwd+" "+this.regDatetime;
    }
}

class FileDAO{
    private File file;
    private Writer fWriter;
    private BufferedWriter bWriter;
    private Scanner sc;
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public Writer getfWriter() {
        return fWriter;
    }
    public void setfWriter(Writer fWriter) {
        this.fWriter = fWriter;
    }
    public BufferedWriter getbWriter() {
        return bWriter;
    }
    public void setbWriter(BufferedWriter bWriter) {
        this.bWriter = bWriter;
    }
    public Scanner getSc() {
        return sc;
    }
    public void setSc(Scanner sc) {
        this.sc = sc;
    }
    
    FileDAO(String fileName){
        int index=fileName.lastIndexOf("\");
        String path =fileName.substring(0, index);
        File fPath=new File(path);
        if(!fPath.exists()) {
            fPath.exists();
        }
        this.file=new File(fileName);
        if(!this.file.exists()) {
            try {
                this.file.createNewFile();
            }catch(IOException ioe) {
                ioe.printStackTrace();
            }
        }
    
    }
    
    boolean writerDateToFile(String user) {
        boolean b=false;
        try {
            this.fWriter=new FileWriter(this.file,true);
            this.bWriter=new BufferedWriter(this.fWriter);
            this.bWriter.write(user+"n");
            b=true;
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            try {
                this.bWriter.close();
                this.fWriter.close();
                
            }catch(IOException ioe) {
                ioe.printStackTrace();
            }
        }
        return b;
    }
    
    
    ArrayList readDateFromFile(){
        ArrayList userList =new ArrayList();
        try {
            this.sc=new Scanner(this.file);
            this.sc.useDelimiter("n");
            while(sc.hasNext()) {
                userList.add(sc.next());
            }
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            sc.close();
        }
        return userList;
    }
}

class Register{
    private User user;
    Register(User user){
        this.user=user;
    }
    boolean register(User user) {
        this.user=user;
        FileDAO fDAO =new FileDAO("C:\Users\hp\Desktop\大二下\java\期末作业\user.txt");
        return fDAO.writerDateToFile(this.user.toString());
    }
    boolean  check(User user) {
        boolean b=false;
        FileDAO fDAO=new FileDAO("C:\Users\hp\Desktop\大二下\java\期末作业\user.txt");
        ArrayListuserList =fDAO.readDateFromFile();
        User u=null;                      
        for(String s:userList) {
            u=new User(s);
            if(u.getUserName().equals(user.getUserName())) {
                b=true;
                break;
            }
        }
        return b;
    }

}


class Login {
    private User user;
    Login(User user){
        this.user=user;
    }
    Login(){
        ;
    }

    int login(User user) {
        boolean b=false;
        
        FileDAO fDAO=new FileDAO("C:\Users\hp\Desktop\大二下\java\期末作业\user.txt");
        ArrayList userList=fDAO.readDateFromFile();
        User u=null;
        for(String s:userList) {//返回1:账号名不存在 返回2:密码错误  返回3:登入成功
            u=new User(s);
            if(u.getUserName().equals(user.getUserName())) {
                if(u.getUserPwd().equals(user.getUserPwd())) {
                    return 3;
                    
                }
                return 2;         
        }
            
    }
        return 1;
}

}

class Window3 extends JFrame implements ActionListener{
    
     JTextField longingname;
     JTextField field;
     JLabel dateshow;//显示选择日期到界面窗口
     Box boxH=Box.createHorizontalBox();
     JLabel label_seat;
     Font font1=new Font("楷体",Font.PLAIN,25);
     Font font2=new Font("楷体",Font.PLAIN,15);
     String seat="未选择座位";
     Button A,B,C,D,E,F,过道;
     //获取日期显示在文本框
     
     private  JTextField dateField  =   new  JTextField();
     String[] stations={"青岛","潍坊","淄博","济南","聊城"};
        JComboBox beginStation,endStation;
        JButton selectDateButton,okButton,cancelButton;
        JLabel date;
    Window3() {
        //----------------------日期
        
        super();
        Container c=getContentPane();
        c.setLayout(new GridLayout(9,1));
        
        JPanel p1,p2,p3,p4,p5,p6,p7,p8;
        // 座位选择
        buttonActionListener buttonListener = new buttonActionListener();
        buttonListener.setWindow3(this);
        A=new Button("A");
        A.addActionListener(buttonListener);
        
        B=new Button("B");
        B.addActionListener(buttonListener);
        
        C=new Button("C");
        C.addActionListener(buttonListener);
        
        D=new Button("D");
        D.addActionListener(buttonListener);
        
        E=new Button("E");
        E.addActionListener(buttonListener);
        
        F=new Button("F");
        F.addActionListener(buttonListener);
        过道=new Button("过道");
        boxH.add(A);
        boxH.add(B);
        boxH.add(C);
        boxH.add(D);
        boxH.add(过道);
        boxH.add(E);
        boxH.add(F);
        label_seat=new JLabel("座位选择:");
        label_seat.setFont(font1);
        p1=new JPanel();
        p2=new JPanel();
        p3=new JPanel();
        p4=new JPanel();
        p5=new JPanel();
        p6=new JPanel();
        p7=new JPanel();//身份证号
        p8=new JPanel();//手机号
    
        JLabel longing =new JLabel("乘车人姓名:");
        longing.setFont(font1);
        p2.add(longing);
        longingname=new JTextField(10);
        p2.add(longingname);
        
        JLabel label_id = new JLabel("身份证号:");
        label_id.setFont(font1);
        p7.add(label_id);
        JTextField label_idNumber = new JTextField(18);
        p7.add(label_idNumber);
        p7.setVisible(true);
        
        JLabel label_phone = new JLabel("手机号:");
        label_phone.setFont(font1);
        p8.add(label_phone);
        JTextField label_phoneNumber = new JTextField(11);
        p8.add(label_phoneNumber);
        p8.setVisible(true);
        
        beginStation=new JComboBox(stations);//输入起点站
        beginStation.setSelectedIndex(1);
        
        JLabel l1=new JLabel("起点车站:");
        l1.setFont(font1);
        p4.add(l1);
        p4.add(beginStation);
        //为组合框添加监视器
        endStation=new JComboBox(stations);//输入起点站
        endStation.setSelectedIndex(1);
        
        JLabel l2=new JLabel("终点车站:");
        l2.setFont(font1);
        p5.add(l2);
        p5.add(endStation);
        
         JButton chooseStartDateButton;
         JButton okButton;
         JButton replaceButton;
        
         chooseStartDateButton=new JButton("选择出发日期");

        //出发日期监听器
         
         chooseStartDateButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                JDateChooser chooseDate =new JDateChooser();
            
                chooseDate.setBounds(400,400,400,400);
                chooseDate.setVisible(true);
                
                dateshow.setText(chooseDate.dateShow());
                
            }});
         //---------------------------------------------------
         okButton=new JButton("确定");
         replaceButton=new JButton("重置");
        //----------------------------------------------------
         //确定监听器
         okButton.addActionListener(new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String nameStr=longingname.getText().trim();
                String  start_station=(String)(beginStation.getSelectedItem());
                String  end_station=(String)(endStation.getSelectedItem());
                String idNumber=label_idNumber.getText();
                String phoneNumber=label_phoneNumber.getText();
                String chooseyear,choosemonth,choosedate;
                
                JDateChooser gg = new JDateChooser();
                
                chooseyear=String.valueOf(gg.getYear());
                choosemonth=String.valueOf(gg.getMonth());
                choosedate=String.valueOf(gg.getDate());
                // String dateShow=gg.getDateFormat("yyyy-MM-dd HH:mm:ss");
                //String dateShow=getDate();//gg.dateShow();
                  String display1="乘车人: "+nameStr+"n"+"身份证号: "+idNumber+'n'+"手机号: "+phoneNumber+"n座位: "+seat+"n起点站: "+start_station+"n终点站: "+end_station+"n日期: "+chooseyear+"日"+choosemonth+"月"+choosedate+"日";//dateShow.getYear()+"日"+dateShow.getYear()+"月"+dateShow.getDay()+"日";
                JOptionPane.showMessageDialog(null, display1);
            }
             
         });
         
         //重置按钮监听器实现
         
         replaceButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    longingname.setText("");
                    beginStation.getSelectedItem();
                    endStation.getSelectedItem();
                    dateshow.setText("");
                    
                }
                
                
            });
         //----------------------------------------------------
         JDateChooser gg = new JDateChooser();
        p3.add(chooseStartDateButton);
        
        
        dateshow=new JLabel();
        p3.add(dateshow);
        p1.add(okButton);
        p1.add(replaceButton);
        
        c.add(p2);
        c.add(p7);
        c.add(p8);
        c.add(label_seat);
        c.add(boxH);
        c.add(p4);
        c.add(p5);
        c.add(p3);
        
        c.add(p1,BorderLayout.SOUTH);
    
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        
    }
        
}

class buttonActionListener implements ActionListener{
    Window3 w3;
    public void setWindow3(Window3 w) {
        this.w3=w;
    }
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==w3.A) {
            w3.seat="座位 A";
        }else if(e.getSource()==w3.B) {
            w3.seat="座位 B";
        }else if(e.getSource()==w3.C) {
            w3.seat="座位 C";
        }else if(e.getSource()==w3.D) {
            w3.seat="座位 D";
        }else if(e.getSource()==w3.E) {
            w3.seat="座位 E";
        }else if(e.getSource()==w3.F) {
            w3.seat="座位 F";
        }
        
        
    }
}

final class JDateChooser extends JDialog
{  // 定义相关参数
   private int year = 0;
   private int month = 0;
   private int date = 0;
   //日期选择背景色
   private Color selectColor = Color.pink;
   // 日期背景色
   private Color dateColor = Color.white;
   // 日期鼠标进入背景色
   private Color dateHoverColor = Color.white;
   // 日期标题背景色
   private Color dateTitleColor = Color.white;
   // 日期标题字体颜色
   private Color dateTitleFontColor = Color.black;
   //日期字体颜色
   private Color dateFontColor = Color.black;
   //日期是否有效标志
   private boolean flag = false;
   /
   public void setDate(int year, int month, int date)
   {
      if (year >= minYear && year <= maxYear)
      {
         this.year = year;
      }
      else
      {
         return;
      }
      if (month >= 1 && month <= 12)
      {
         this.month = month;
      }
      else
      {
         return;
      }
      if (date > 0 && date <= getDaysInMonth(year, month))
      {
         this.date = date;
      }
      else
      {
         return;
      }
   }
 
   
   public boolean getFlag()
   {
      return flag;
   }
// 构造方法
   public JDateChooser()
   {
      initComponent();
      initComponentData();
      addComponent();
      addListener();
      setDialogAttribute();
   }
// 实例化组件
   private void initComponent()
   {
      jbYearPre = new JButton();
      jbYearNext = new JButton();
      jbMonthPre = new JButton();
      jbMonthNext = new JButton();
      jcbYear = new JComboBox();
      jcbMonth = new JComboBox();
      jlDays = new JLabel[7][7];
      jbChoose = new JButton();
      jbToday = new JButton();
      jbCancel = new JButton();
   }
//初始化组件数据
   private void initComponentData()
   {
      jbYearPre.setText("←");
      jbYearNext.setText("→");
      jbMonthPre.setText("↑");
      jbMonthNext.setText("↓");
      Calendar calendar = Calendar.getInstance();
      if (year != 0 && month != 0 && date != 0)
      {
         calendar.set(year, month - 1, date);
      }
      else
      {
         year = calendar.get(Calendar.YEAR);
         month = calendar.get(Calendar.MONTH) + 1;
         date = calendar.get(Calendar.DAY_OF_MONTH);
      }
      initYear();
      jcbYear.setSelectedItem(year + "年");
      for (int i = 1; i <= 12; i++)
      {
         jcbMonth.addItem(i + "月");
      }
      jcbMonth.setSelectedItem(month + "月");
      for (int i = 0; i < 7; i++)
      {
         JLabel temp = new JLabel();
         temp.setHorizontalAlignment(JLabel.CENTER);
         temp.setVerticalAlignment(JLabel.CENTER);
         temp.setOpaque(true);
         temp.setBackground(dateTitleColor);
         temp.setForeground(dateTitleFontColor);
         jlDays[0][i] = temp;
      }
      for (int i = 1; i < 7; i++)
      {
         for (int j = 0; j < 7; j++)
         {
            JLabel temp = new JLabel();
            temp.setHorizontalAlignment(JLabel.CENTER);
            temp.setVerticalAlignment(JLabel.CENTER);
            temp.setOpaque(true);
           temp.setForeground(dateFontColor);
            jlDays[i][j] = temp;
         }
      }
 
      String[] days = { "日", "一", "二", "三", "四", "五", "六" };
      for (int i = 0; i < 7; i++)
      {
         jlDays[0][i].setText(days[i]);
      }
 
      jbChoose.setText("选择");
      jbToday.setText("今日");
      jbCancel.setText("取消");
 
      changeDate();
   }
    // 初始化显示年份范围
   private void initYear()
   {
      jcbYear.removeAllItems();
      for (int i = minYear; i <= maxYear; i++)
      {
         jcbYear.addItem(i + "年");
      }
   }
 
   
   private void addComponent()
   {
      // 添加背部组件
      JPanel north = new JPanel();
      north.add(jbYearPre);
      north.add(jbMonthPre);
      north.add(jcbYear);
      north.add(jcbMonth);
      north.add(jbMonthNext);
      north.add(jbYearNext);
     
      //---------------
      this.add(north, "North");
      //----------------
      
      // 添加中间组件
      JPanel center = new JPanel(new GridLayout(7, 7));
      for (int i = 0; i < 7; i++)
      {
         for (int j = 0; j < 7; j++)
         {
            center.add(jlDays[i][j]);
         }
      }
      this.add(center);
 
      // 添加南部组件
      JPanel jpSouth = new JPanel();
     // jpSouth.add(startTime);
      //jpSouth.add(endTime);
      jpSouth.add(jbChoose);
      jpSouth.add(jbToday);
      jpSouth.add(jbCancel);
      
      this.add(jpSouth, "South");
   }
 
   
   private int getDaysInMonth(int year, int month)
   {
      switch (month)
      {
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
         return 31;
      case 4:
      case 6:
      case 9:
      case 11:
         return 30;
      case 2:
         if (isLeapYear(year))
         {
            return 29;
         }
         return 28;
      default:
         return 0;
      }
   }
 
   //清空日期
   private void clearDate()
   {
      for (int i = 1; i < 7; i++)
      {
         for (int j = 0; j < 7; j++)
         {
            jlDays[i][j].setText("");
         }
      }
   }
 
   // 更改日期
   private void changeDate()
   {
      refreshLabelColor();
      clearDate();
      Calendar calendar = Calendar.getInstance();
      calendar.set(year, month - 1, 1);
      int day_in_week = calendar.get(Calendar.DAY_OF_WEEK);
      int days = getDaysInMonth(year, month);
      if (date > days)
      {
         date = 1;
      }
      int temp = 0;
      for (int i = day_in_week - 1; i < 7; i++)
      {
         temp++;
         jlDays[1][i].setText(temp + "");
         if (temp == date)
         {
            jlDays[1][i].setBackground(selectColor);
         }
      }
      for (int i = 2; i < 7; i++)
      {
         for (int j = 0; j < 7; j++)
         {
            temp++;
            if (temp > days)
            {
               return;
            }
            jlDays[i][j].setText(temp + "");
            if (temp == date)
            {
               jlDays[i][j].setBackground(selectColor);
            }
         }
      }
   }
 
   
   private void addListener()
   {
      LabelMouseListener labelMouseListener = new LabelMouseListener();
      for (int i = 1; i < 7; i++)
      {
         for (int j = 0; j < 7; j++)
         {
            jlDays[i][j].addMouseListener(labelMouseListener);
         }
      }
      ButtonActionListener buttonActionListener = new ButtonActionListener();
      jbYearPre.addActionListener(buttonActionListener);
      jbYearNext.addActionListener(buttonActionListener);
      jbMonthPre.addActionListener(buttonActionListener);
      jbMonthNext.addActionListener(buttonActionListener);
      jbChoose.addActionListener(buttonActionListener);
      jbToday.addActionListener(buttonActionListener);
      jbCancel.addActionListener(buttonActionListener);
 
      ComboBoxItemListener comboBoxItemListener = new ComboBoxItemListener();
      jcbYear.addItemListener(comboBoxItemListener);
      jcbMonth.addItemListener(comboBoxItemListener);
   }
   
   private int parseYearOrMonth(String yearOrMonth)
   {
      return Integer.parseInt(yearOrMonth.substring(0, yearOrMonth.length() - 1));
   }
   
   private boolean isLeapYear(int year)
   {
      return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
   }
   
   private void setDialogAttribute()
   {
      this.setModal(true);
      this.setTitle("选择出发日期时间");
   }
   
   private void refreshLabelColor()
   {
      for (int i = 1; i < 7; i++)
      {
         for (int j = 0; j < 7; j++)
         {
           jlDays[i][j].setBackground(dateColor);
         }
      }
   }
   
   public int getMinYear()
   {
      return minYear;
   }
   
   public int getMaxYear()
   {
      return maxYear;
   }
 
   
   public void setMinAndMaxYear(int minYear, int maxYear)
   {
      if (minYear > maxYear || minYear < 1900 || maxYear > 9999)
      {
         return;
      }
      this.minYear = minYear;
      this.maxYear = maxYear;
      initYear();
   }
 
   
   public Color getSelectColor()
   {
      return selectColor;
   }
 
   
   public void setSelectColor(Color selectColor)
   {
      this.selectColor = selectColor;
   }
 
   //获得日期背景颜色
   public Color getDateColor()
   {
      return dateColor;
   }
  //设置日期背景颜色 
   public void setDateColor(Color dateColor)
   {
      this.dateColor = dateColor;
   }
 
   //获得日期鼠标进入背景颜色
   
   public Color getDetaHoverColor()
   {
     return dateHoverColor;
   }
  // 设置日期鼠标进入背景颜色
   public void setDateHoverColor(Color dateHoverColor)
   {
      this.dateHoverColor = dateHoverColor;
   }
// 获得日期标题背景颜色
   public Color getDateTitleColor()
   {
      return dateTitleColor;
   }
   // 设置日期标题背景颜色
   public void setDateTitleColor(Color dateTitleColor)
  {
     this.dateTitleColor = dateTitleColor;
   }
//获得日期标题字体颜色
  public Color getDateTitleFontColor()
   {
      return dateTitleFontColor;
   }
   // 设置日期标题字体颜色
   public void setDateTitleFontColor(Color dateTitleFontColor)
   {
      this.dateTitleFontColor = dateTitleFontColor;
   }
// 获得日期字体颜色
   public Color getDateFontColor()
   {
      return dateFontColor;
   }
// 设置日期字体颜色
 
   public void setDateFontColor(Color dateFontColor)
   {
      this.dateFontColor = dateFontColor;
   }
//获得选择年份
   public int getYear()
   {
      return year;
   }
// 获得选中月份
   public int getMonth()
   {
      return month;
   }
// 获得选中天为当月第几天
 
   public int getDate()
   {
      return date;
   }
// 获得选中天为一周中第几天
   public int getDayOfWeek()
   {
      return getCalendar().get(Calendar.DAY_OF_WEEK);
   }
//获得选中天为一年中第几天
 
   public int getDayOfYear()
   {
      return getCalendar().get(Calendar.DAY_OF_YEAR);
   }
// 获得日期对象
   public Date getDateObject()
   {
      return getCalendar().getTime();
   }
//获得以指定规则格式化的日期字符串
   public String getDateFormat(String format)
   {
      return new SimpleDateFormat(format).format(getDateObject());
   }
//获得Calendar对象
   private Calendar getCalendar()
   {
      Calendar calendar = Calendar.getInstance();
      calendar.set(year, month - 1, date);
      return calendar;
   }
 
   // 标签鼠标监听
   final class LabelMouseListener extends MouseAdapter
   {
 
      @Override
      public void mouseClicked(MouseEvent e)
      {
         JLabel temp = (JLabel) e.getSource();
         if (!temp.getText().equals(""))
         {
            int date = Integer.parseInt(temp.getText());
            {
               if (date != JDateChooser.this.date)
               {
                  JDateChooser.this.date = date;
                  refreshLabelColor();
                  temp.setBackground(selectColor);
               }
            }
         }
      }
 
      @Override
      public void mouseEntered(MouseEvent e)
      {
         JLabel temp = (JLabel) e.getSource();
         if (!temp.getText().equals(""))
         {
            temp.setBackground(dateHoverColor);
         }
      }
 
      @Override
      public void mouseExited(MouseEvent e)
      {
         JLabel temp = (JLabel) e.getSource();
         if (!temp.getText().equals(""))
         {
            if (Integer.parseInt(temp.getText()) != date)
            {                                   
                
               temp.setBackground(dateColor);
            }
            else
            {
               temp.setBackground(selectColor);
            }
         }
      }
 
   }
 
   // 按钮动作监听
  
   final class ButtonActionListener implements ActionListener
   {
 
      public void actionPerformed(ActionEvent e)
      {
         if (e.getSource() == jbYearPre)
         {
            int select = jcbYear.getSelectedIndex();
            if (select > 0)
            {
               jcbYear.setSelectedIndex(select - 1);
            }
         }
         else if (e.getSource() == jbYearNext)
         {
            int select = jcbYear.getSelectedIndex();
            if (select < jcbYear.getItemCount() - 1)
            {
               jcbYear.setSelectedIndex(select + 1);
            }
         }
         else if (e.getSource() == jbMonthPre)
         {
            int select = jcbMonth.getSelectedIndex();
            if (select > 0)
            {
               jcbMonth.setSelectedIndex(select - 1);
            }
         }
         else if (e.getSource() == jbMonthNext)
         {
            int select = jcbMonth.getSelectedIndex();
            if (select < jcbMonth.getItemCount() - 1)
            {
               jcbMonth.setSelectedIndex(select + 1);
            }
         }
         else if (e.getSource() == jbChoose)
         {
            flag = true;
            closeDateChooser();
         }
         else if (e.getSource() == jbToday)
         {
            flag = true;
            Calendar calendar = Calendar.getInstance();
            year = calendar.get(Calendar.YEAR);
            month = calendar.get(Calendar.MONTH) + 1;
            date = calendar.get(Calendar.DATE);
            closeDateChooser();
         }
         else if (e.getSource() == jbCancel)
         {
            flag = false;
            closeDateChooser();
         }
      }
   }
   
   final class ComboBoxItemListener implements ItemListener
   {
      public void itemStateChanged(ItemEvent e)
      {
         if (e.getSource() == jcbYear)
         {
            int year = parseYearOrMonth(jcbYear.getSelectedItem().toString());
            if (year != JDateChooser.this.year)
            {
               JDateChooser.this.year = year;
               changeDate();
            }
         }
         else if (e.getSource() == jcbMonth)
         {
            int month = parseYearOrMonth(jcbMonth.getSelectedItem().toString());
            if (month != JDateChooser.this.month)
            {
               JDateChooser.this.month = month;
               changeDate();
            }
         }
      }
   }
}
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号