DatePicker和JXDatePicker

swing没有自带的日期控件,需要第三方的类 。
为了实现这个目的,我们需要先下载Jar包(需要Jar包的可以在评论区留言)
和JDBC中初始化驱动一样,我们需要先导入Jar包,如图所示:
DatePicker和JXDatePicker_第1张图片
然后我们需要在这个工程设置lib文件夹,放入下载后的Jar包,如图所示:
DatePicker和JXDatePicker_第2张图片

1.DatePicker
我们先来用代码来介绍一下DatePicker:

package gui12;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import com.eltima.components.ui.DatePicker;
public class TestGUI {

	public static void main(String[] args) {
		JFrame f = new JFrame("LoL");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        f.setLayout(null);
        
        final DatePicker dp;
        dp = getDatePicker();
        
        f.add(dp);
        JButton b = new JButton("获取时间");
        b.setBounds(137, 183, 100, 30);
        f.add(b);
        
        b.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(f,"获取控件中的日期:" + dp.getValue());
			}
		});
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
	
	public static DatePicker getDatePicker() {
		final DatePicker dp;
		//格式
		String DefaultFormat = "yyyy-mm-dd HH:mm:ss";
		//当前时间
		Date date = new Date(0);
		//字体
		Font font = new Font("Times New Roman",Font.BOLD,14);
		//设置大小
		Dimension ds = new Dimension(177,24);
		int[] hilightDays = {1,3,5,7};
		int[] disabledDays = {4,6,5,9};
		dp = new DatePicker(date,DefaultFormat,font,ds);
		//dp.setLocation(137,83);
		dp.setBounds(137, 83, 177, 24);
		// 设置一个月份中需要高亮显示的日子
		dp.setHightlightdays(hilightDays,Color.red);
		// 设置一个月份中不需要的日子,呈灰色显示
		dp.setDisableddays(disabledDays);
		// 设置国家
		dp.setLocale(Locale.CHINA);
		//设置时钟面板可见
		dp.setTimePanleVisible(true);
		return dp;
	}
}

结果:
DatePicker和JXDatePicker_第3张图片
点击时间右边的按钮可以进行时间的修改:
DatePicker和JXDatePicker_第4张图片
可以将默认时间改为Today
如果点击获取时间的按钮,可以得到如下:
DatePicker和JXDatePicker_第5张图片

但是,本例使用 datepicker.jar 包,有一个缺点,不能设置时间,只能在创建控件的时候传入指定日期。

2.JXDatePicker
同样道理可以先将JXDatePicker的Jar包导入。
代码如下:

package gui12;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.jdesktop.swingx.JXDatePicker;
public class TestGUI2 {

	public static void main(String[] args) {
		JFrame f = new JFrame("LoL");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        f.setLayout(null);
        
        Date date = new Date();
        JXDatePicker jdp = new JXDatePicker();
        
        // 设置 date日期
        jdp.setDate(date);
        jdp.setBounds(137, 83, 177, 24);
        f.add(jdp);
        
        JButton b = new JButton("获取时间");
        b.setBounds(137, 183, 100, 30);
        f.add(b);
        
        b.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 获取 日期
				Date d = jdp.getDate();
				JOptionPane.showMessageDialog(f,"获取控件中的日期:" + d);
			}
		});
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
	}
}

结果:
DatePicker和JXDatePicker_第6张图片
这里和DatePicker不同界面比较简约,可以设置日期。而且代码量也很少,但是如果要寻找以前的一个时间点,需要手动的往前翻,不像DatePicker那样方便。

比较了DatePicker和JXDatePicker的差别之后,我们现在通过一道练习题来巩固一下。
3.练习
借助时间控件,选中一个时间,然后根据这个时间,统计在D:/c语言代码 目录下,修改时间大于控件日期的文件总数。

代码如下:

package gui12;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
  
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
  
import com.eltima.components.ui.DatePicker;

public class TestGUI3 {

	public static void main(String[] args) {
		JFrame f = new JFrame("LoL");
        f.setSize(500, 300);
        f.setLocation(200, 200);
        f.setLayout(null);
   
        final DatePicker datepick;
        datepick = getDatePicker();
   
        f.add(datepick);
   
        JButton b = new JButton("统计在D:/c语言代码 目录下,修改时间大于控件日期的文件总数");
        b.setBounds(20, 183, 450, 30);
        f.add(b);
   
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                File folder = new File("D:\\c语言代码");
                Date d = (Date) datepick.getValue();
                JOptionPane.showMessageDialog(f, "文件总数是:" + countFilesModifiedDateGreaterThan(folder, d));
            }
        });
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
	
	public static DatePicker getDatePicker() {
		final DatePicker dp;
		//格式
		String DefaultFormat = "yyyy-mm-dd HH:mm:ss";
		//当前时间
		Date date = new Date();
		//字体
		Font font = new Font("Times New Roman",Font.BOLD,14);
		//设置大小
		Dimension ds = new Dimension(177,24);
		int[] hilightDays = {1,3,5,7};
		int[] disabledDays = {4,6,5,9};
		dp = new DatePicker(date,DefaultFormat,font,ds);
		//dp.setLocation(137,83);
		dp.setBounds(137, 83, 177, 24);
		// 设置一个月份中需要高亮显示的日子
		dp.setHightlightdays(hilightDays,Color.red);
		// 设置一个月份中不需要的日子,呈灰色显示
		dp.setDisableddays(disabledDays);
		// 设置国家
		dp.setLocale(Locale.CHINA);
		//设置时钟面板可见
		dp.setTimePanleVisible(true);
		return dp;
	}
	//递归来计算这个文件夹中有几个文件
	public static List scanFolder(File folder){
		List files = new ArrayList<>();
		File[] fs = folder.listFiles();
		for(File f : fs) {
			if(f.isDirectory()) {	//如果是文件夹则需要进行递归操作
				List files2 = scanFolder(f);//将这个文件夹中的所有文件加入其中
				files.addAll(files2);
			}
			if(f.isFile()) {//如果是文件则直接加入
				files.add(f);
			}
		}
		return files;
	}
	
	public static long countFilesModifiedDateGreaterThan(File folder,Date d) {
		List fs = scanFolder(folder);//fs保持文件夹中所有的文件
		long result = 0;
		for(File f1 : fs) {//对其中的每一个文件进行遍历操作
			if(f1.lastModified() > d.getTime()) result++;//时间在修改之后的累计
		}
		return result;
	}
}

基本思路就是创建DatePicker来显示日期控件,然后在JButton的监听中先搜寻这个时间点之后的文件数,随后显示出来。

你可能感兴趣的:(java的图像界面)