swing没有自带的日期控件,需要第三方的类 。
为了实现这个目的,我们需要先下载Jar包(需要Jar包的可以在评论区留言)
和JDBC中初始化驱动一样,我们需要先导入Jar包,如图所示:
然后我们需要在这个工程设置lib文件夹,放入下载后的Jar包,如图所示:
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;
}
}
结果:
点击时间右边的按钮可以进行时间的修改:
可以将默认时间改为Today
如果点击获取时间的按钮,可以得到如下:
但是,本例使用 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不同界面比较简约,可以设置日期。而且代码量也很少,但是如果要寻找以前的一个时间点,需要手动的往前翻,不像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的监听中先搜寻这个时间点之后的文件数,随后显示出来。