SWING的日期控件的问题
请问一下JB里的日期控件吗?
我好像找不到啊。。
还有就是在网上找的S基于SWING的日期控件,好像没有获取年月日等相关的数据的函数。。
如果各位有好介绍的话。。可以发过我吗?
邮箱;liyuncdc@163.com
[解决办法]
package com.newer.sims.util;
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.util.*;
import javax.swing.table.*;
public class CalendarWindow extends JDialog{
String[] days = { "01 ", "02 ", "03 ", "04 ", "05 ", "06 " , "07 ", "08 ", "09 ", "10 ",
"11 ", "12 ", "13 ", "14 ", "15 ", "16 ", "17 ", "18 ", "19 ", "20 ",
"21 ", "22 ", "23 ", "24 ", "25 ", "26 ", "27 ", "28 ", "29 ", "30 ", "31 "};
String[] colName = { " 日 ", " 一 ", " 二 ", " 三 ", " 四 ", " 五 ", " 六 "};
String[] months = { "01 ", "02 ", "03 ", "04 ", "05 ", "06 ",
"07 ", "08 ", "09 ", "10 ", "11 ", "12 "};
Object[][] rows = new Object[6][7];
java.sql.Date date;
java.util.Calendar calendar = Calendar.getInstance();
JPanel contentPane;
JPanel pnlNorth = new JPanel(new FlowLayout());
JPanel pnlCenter = new JPanel(null);
JComboBox cboMonth = new JComboBox(months);
SpinnerModel smode;
JSpinner spnYear;
boolean ok = true;
JTable tabCalendar = new JTable(rows, colName);
JTableHeader tabHeader = tabCalendar.getTableHeader();
/*构造方法*/
public CalendarWindow(Frame frame,int x, int y){
super(frame, "日期选择 ",true);
this.setUndecorated(true);//如果没有启用 dialog 装饰,则为 true
contentPane = (JPanel)this.getContentPane();
contentPane.setBorder(BorderFactory.createLineBorder(Color.BLACK));
contentPane.setBackground(Color.WHITE);
pnlNorth.setBackground(Color.WHITE);
cboMonth.setFont(new Font( "宋体 ",Font.PLAIN,13));
cboMonth.setBackground(Color.WHITE);
//cboMonth.setBounds(25,10,50,25);
cboMonth.setPreferredSize(new Dimension(58,21));
Calendar c = Calendar.getInstance();
smode = new SpinnerNumberModel(c.get(Calendar.YEAR),1980,2099,1);
spnYear = new JSpinner(smode);
cboMonth.setSelectedIndex(c.get(Calendar.MONTH));
//spnYear.setBounds(105,10,50,25);
spnYear.setPreferredSize(new Dimension(60,21));
pnlNorth.add(spnYear);
pnlNorth.add(cboMonth);
tabHeader.setResizingAllowed(false);
// try{
// String look = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel ";
// UIManager.setLookAndFeel(look);
// SwingUtilities.updateComponentTreeUI(this);
//}catch(Exception e){
//e.printStackTrace();
//}
tabHeader.setBounds(0,0,205,20);
tabHeader.setForeground(Color.blue);
tabCalendar.setBounds(5,21,200,150);
tabCalendar.setBorder(null);
// tabCalendar.setGridColor(Color.black);
tabCalendar.getTableHeader().setReorderingAllowed(false);//设置不允许拖动表头
tabCalendar.addMouseListener(new Tml());
tabCalendar.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);//一次只能选择一个列表索引
tabCalendar.setCellSelectionEnabled(true);//设置是否允许单选单元格
tabCalendar.setSelectionBackground(Color.blue);
tabCalendar.setSelectionForeground(Color.RED);
//tabCalendar.setForeground(Color.BLUE);
tabCalendar.setDragEnabled(false);//该属性必须为 true 才能确保启用对此组件的自动拖动处理
tabCalendar.setShowGrid(false);//设置表是否绘制单元格周围的网格线
tabCalendar.setSurrendersFocusOnKeystroke(false);//此属性为 false,且 JTable 保留焦点,除非单击了单元格
tabCalendar.setToolTipText( "单击鼠标选择日期. ");
pnlCenter.add(tabHeader);
pnlCenter.add(tabCalendar);
contentPane.add( "Center ",pnlCenter);
contentPane.add( "North ", pnlNorth);
/*JSpinner对象注册监听器*/
spnYear.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent ce){
clearAll(6,7);
changeEvent();
}
}) ;
cboMonth.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
clearAll(6,7);
changeEvent();
}
});
changeEvent();
this.setAlwaysOnTop(true);
this.setBounds(x,y,205,153);
//this.setVisible(true);
}
/*JTable监听器类*/
class Tml extends MouseAdapter{
public void mouseClicked(MouseEvent e){
int row = tabCalendar.getSelectedRow();
int cols = tabCalendar.getSelectedColumn();
String days = ((String)tabCalendar.getValueAt(row,cols)).trim();
if(days != null){
if(days.length()> 0){
String month = String.valueOf((cboMonth.getSelectedIndex()+1));
String year = spnYear.getValue().toString();
setDate(year, month, days);
CalendarWindow.this.setVisible(false);
}else{
CalendarWindow.this.dispose();
}
}else{
CalendarWindow.this.dispose();
}
}
}
public void showDateDialog(){
this.setVisible(true);
}
public void setDate(String year, String month, String days){
date = java.sql.Date.valueOf(year + "- " + month + "- " + days);
ok = false;
}
public java.sql.Date getDate(){
return date;
}
/*清除日历表*/
public void clearAll(int rows, int cols){
for (int i = 0; i < rows ; i++){
for (int j = 0; j < cols; j++){
tabCalendar.setValueAt( " ",i,j);
}
}
}
/*重新布置日历表*/
public void changeEvent(){
Object objYear = spnYear.getValue();
int year = Integer.parseInt(objYear.toString());
int month = cboMonth.getSelectedIndex();
int days_of_month = getDaysOfMonth(year,month+1);
calendar.set(year,month,1);
boolean isOne = false;
int weekday = calendar.get(Calendar.DAY_OF_WEEK);
int dayNumber = 0;
for (int i = 0; i < 6; i++) {
for (weekday = (isOne ? 1 : weekday); weekday < 8; weekday++) {
if (dayNumber > = days_of_month ){
break;
}
tabCalendar.setValueAt(days[dayNumber], i, weekday - 1);
dayNumber++;
isOne = true;
}
if (dayNumber > = days_of_month){
break;
}
}
}
/*获取某年某月的最大天数*/
public int getDaysOfMonth(int year, int month){
GregorianCalendar gc = new GregorianCalendar(year,month-1,1,0,0,0);
int[] daysOfMonth = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(gc.isLeapYear(year)){
daysOfMonth[2]=29;
}
return daysOfMonth[month];
}
public static void main(String[] args){
new CalendarWindow(new JFrame(),100,100).showDateDialog();
}
}
