背景:
最近在做个Java程序,用来做客户端,使用Swing来开发,界面需要选择一个月份,这个时候使用日期选择器就很蹩脚,不太好应用,网上搜了一会儿找不到合适的拿来直接用,所以在其中一个博客上面找到一个DateChooser的类进行修改,用于进行月份选择;修改后可以拿来使用,对于业务的场景使用OK了,后续比如增加月份选择后再选择等操作还没有实现,后续有空再增加,另外还有部分不再使用的代码还没空删除,有需要的可以参照代码,代码如下:
package my.contacteditor;
/**
* @date 2018-11-21
*/
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Stroke;
import java.awt.Toolkit;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
/**
* 月份选择器,选择相应的月份
*/
public class MonthChooser extends JPanel{
private static final long serialVersionUID = 4529266044762990227L;
private Date initDate;
private Calendar now=Calendar.getInstance();
private Calendar select;
private Date selectDate;
private JPanel monthPanel;//月历
private JP1 jp1;//四块面板,组成
private JP2 jp2;
private JP3 jp3;
private JP4 jp4;
private Font font=new Font("宋体",Font.PLAIN,12);
private final LabelManager lm=new LabelManager();
private JLabel showDate; //,toSelect;
private SimpleDateFormat sdf;
private boolean isShow=false;
private Popup pop;
/**
* Creates a new instance of DateChooser
*/
public MonthChooser() {
this(new Date());
}
public MonthChooser(Date date){
this(date, "yyyy年MM月");
}
public MonthChooser(String format){
this(new Date(), format);
}
public MonthChooser(Date date, String format){
initDate=date;
selectDate = date;
sdf=new SimpleDateFormat(format);
select=Calendar.getInstance();
select.setTime(initDate);
initPanel();
initLabel();
}
public void resetDate() {
select.setTime(new Date());
refresh();
}
/**
* 是否允许用户选择
*/
public void setEnabled(boolean b){
super.setEnabled(b);
showDate.setEnabled(b);
}
/**
*得到当前选择框的日期
*/
public Date getDate(){
return select.getTime();
}
//根据初始化的日期,初始化面板
private void initPanel(){
monthPanel=new JPanel(new BorderLayout());
monthPa