请问一下JB里的日期控件吗?
我好像找不到啊。。
还有就是在网上找的S基于SWING的日期控件,好像没有获取年月日等相关的数据的函数。。
如果各位有好介绍的话。。可以发过我吗?
邮箱;[email protected]

解决方案 »

  1.   

    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();
    }
    }
      

  2.   


    /****************************具体用法********************************/
    // public void mouseClicked(MouseEvent me){

    // if (me.getSource() == txtStartTime){

    // //获得弹出日历窗口的位置
    // Point allPoint = UserLoginRecord.this.getLocationOnScreen();//获得组件的位置,形式是一个指定屏幕坐标空间中组件左上角的一个点
    // Point point = txtStartTime.getLocation();// int x = point.x + allPoint.x;
    // int y = point.y + allPoint.y + 55;// CalendarWindow cal = new CalendarWindow(null,x,y);
    // cal.showDateDialog();// if (cal.getDate() != null){
    // java.util.Date date;// java.sql.Date sqldate = cal.getDate();// date = new java.util.Date(sqldate.getYear(),sqldate.getMonth(),sqldate.getDate(),0,0,1);// txtStartTime.setValue(date); //JFormattedTextField
    // }
    // }