yerenzyy

          很不錯(cuò)的代碼(在Java JTable窗體上添加日歷)

          以JTable窗體形式選擇日期。

          import java.awt.Color;
          import java.awt.Component;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;
          import java.awt.event.MouseAdapter;
          import java.awt.event.MouseEvent;
          import java.util.Calendar;
          import javax.swing.BorderFactory;
          import javax.swing.ComboBoxModel;
          import javax.swing.DefaultComboBoxModel;
          import javax.swing.JComboBox;
          import javax.swing.JFrame;
          import javax.swing.JLabel;
          import javax.swing.JOptionPane;
          import javax.swing.JScrollPane;
          import javax.swing.JSpinner;
          import javax.swing.JTable;
          import javax.swing.JTextField;
          import javax.swing.ListSelectionModel;
          import javax.swing.SpinnerNumberModel;
          import javax.swing.border.BevelBorder;
          import javax.swing.event.ChangeEvent;
          import javax.swing.event.ChangeListener;
          import javax.swing.table.DefaultTableModel;
          import javax.swing.table.TableCellRenderer;
          import javax.swing.table.TableModel;

          public class CaDialog extends javax.swing.JDialog {

           private int row;
           private int column;
           private JTextField jtf;
           public String day = null;
           private JSpinner yearSpinner;
           private JTable dadeTable;
           private JScrollPane jScrollPane1;
           private JComboBox monthComboBox;
           Calendar time = Calendar.getInstance();// 實(shí)例化一個(gè)日歷類對(duì)象
           Object[][] data = new Object[6][7];
           String[] head = { "日", "一", "二", "三", "四", "五", "六" };

           public static void main(String[] args) {
            JFrame frame = new JFrame();
            CaDialog inst = new CaDialog(frame);
            inst.setVisible(true);
           }
           
           public CaDialog(JFrame frame) {
            super(frame);
            initGUI();
           }
           
           public CaDialog(JTextField jtf) {
            super();
            this.jtf=jtf;
            initGUI();
           }
           
           private void initGUI() {
            try {
             {
              getContentPane().setLayout(null);
              this.setModal(true);
             }
             this.setSize(253, 202);
             {
              ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(
               new String[] { "一月", "二月", "三月", "四月", "五月", "六月","七月",
                 "八月", "九月", "十月", "十一月", "十二月" });
              monthComboBox = new JComboBox();
              getContentPane().add(monthComboBox);
              monthComboBox.setModel(jComboBox1Model);
              monthComboBox.setSelectedIndex(Calendar.getInstance().get(
                Calendar.MONTH));
              monthComboBox.setBounds(10, 5, 105, 21);
              monthComboBox.setMaximumRowCount(4);
              monthComboBox.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent evt) {
                monthComboBoxActionPerformed(evt);
               }
              });
             }
             {
              SpinnerNumberModel yearSpinnerModel = new SpinnerNumberModel(1983,1950,2099,1);
              yearSpinner = new JSpinner(yearSpinnerModel);
              yearSpinner.setValue(Calendar.getInstance().get(
                Calendar.YEAR));
              JSpinner.NumberEditor editor = new JSpinner.NumberEditor(
                yearSpinner, "###");
              yearSpinner.setEditor(editor);
              this.add(yearSpinner);
              getContentPane().add(yearSpinner);
              yearSpinner.setModel(yearSpinnerModel);
              yearSpinner.setBounds(127, 5, 105, 21);
              yearSpinner.addChangeListener(new ChangeListener() {
               public void stateChanged(ChangeEvent evt) {
                yearSpinnerStateChanged(evt);
               }
              });
             }
             {
              jScrollPane1 = new JScrollPane();
              getContentPane().add(jScrollPane1);
              jScrollPane1.setBounds(9, 37, 224, 117);
              {
               this.in();
               TableModel jTable1Model = new DefaultTableModel(data, head)
               {public boolean isCellEditable(int row, int column)
               {return false;}
              };;
               dadeTable = new JTable(jTable1Model);
               dadeTable.getTableHeader().setReorderingAllowed(false);
               dadeTable.getTableHeader().setResizingAllowed(false);
               jScrollPane1.setViewportView(dadeTable);
               dadeTable.setCellSelectionEnabled(true);
               dadeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);     
               dadeTable.getTableHeader().setEnabled(false);
               dadeTable.setGridColor(Color.WHITE);
               dadeTable.setDefaultRenderer(Object.class, new TableCellRenderer(){
          //      @Override
                public Component getTableCellRendererComponent(
                  JTable table, Object value, boolean isSelected,
                  boolean hasFocus, int r, int c) {
                 // TODO Auto-generated method stub
                 JLabel cell = new JLabel(value==null?"":String.valueOf(value),0);
                 cell.setOpaque(true);
                 if(isSelected&&dadeTable.getValueAt(r,c)!=null){
                  cell.setBackground(Color.GRAY);
                 }
                 if(r==row&&c==column){
                  cell.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
                 }
                 return cell;
                }
               });
               dadeTable.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent evt) {
                 dateTableMouseClicked(evt);
                }
               });
              }
             }
            } catch (Exception e) {
             e.printStackTrace();
            }
           }

           private void dateTableMouseClicked(MouseEvent evt) {
            try{
            String date = String.valueOf(dadeTable.getValueAt(dadeTable
              .getSelectedRow(), dadeTable.getSelectedColumn()));
            if (date.equals("null")) {
             JOptionPane.showMessageDialog(this, "請(qǐng)選擇日期!");
             return;
            }
            if (evt.getClickCount() == 2) {
             String year = yearSpinner.getValue().toString();
             int month = monthComboBox.getSelectedIndex() + 1;
             day = year + "-" + (String.valueOf(month).length()==1?"0"+month:month) + "-" + (String.valueOf(date).length()==1?"0"+date:date);
             this.jtf.setText(day);
             this.dispose();
            }
            }catch(Exception e){}
           }

           private void monthComboBoxActionPerformed(ActionEvent evt) {
            time.set(Calendar.MONTH, monthComboBox.getSelectedIndex());
            data = (Object[][]) this.clear();
            this.in();
            TableModel dateTableModel = new DefaultTableModel(data, head)
            {public boolean isCellEditable(int row, int column)
             {return false;}
            };
            dadeTable.setModel(dateTableModel);
           }

           private void yearSpinnerStateChanged(ChangeEvent evt) {
            time.set(Calendar.YEAR, Integer.parseInt(String.valueOf(yearSpinner
              .getValue())));
            data = (Object[][]) this.clear();
            this.in();
            TableModel dateTableModel = new DefaultTableModel(data, head)
            {public boolean isCellEditable(int row, int column)
             {return false;}
            };
            dadeTable.setModel(dateTableModel);
           }
           
           public void in() {
            int today = Calendar.getInstance().get(Calendar.DATE);
            time.set(Calendar.DATE, 1);// 設(shè)置日期為1號(hào)
            int w = time.get(Calendar.DAY_OF_WEEK) - 1;// 得一號(hào)星期幾
            time.add(Calendar.MONTH, 1); // 月份+1
            time.add(Calendar.DAY_OF_MONTH, -1);// 退一天
            int day = time.get(Calendar.DATE);// 得到本月最后一天,本月天數(shù)
            int c = 0;
            for (int i = 1; i <= day; i++) {
             if ((i + w) % 7 == 0) {
              c = (int) (i + w) / 7 - 1;
             } else {
              c = (int) (i + w) / 7;
             }
             data[c][(w + i - 1) % 7] = i;
             if (i == today) {
              row=c;
              column=(w+i-1)%7;
             }
            }
           }
           
           public Object clear() {
            return new Object[][] { { null, null, null, null, null, null, null },
              { null, null, null, null, null, null, null },
              { null, null, null, null, null, null, null },
              { null, null, null, null, null, null, null },
              { null, null, null, null, null, null, null },
              { null, null, null, null, null, null, null }, };
           }
          }

          調(diào)用方法:

          CaDialog cai = new CaDialog(this.birthdayTextField1);
            cai.setVisible(true);
            cai.toFront();

          posted on 2008-09-25 11:52 冶人 閱讀(1494) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2008年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 深圳市| 汝城县| 合作市| 舒城县| 古浪县| 城市| 綦江县| 陆良县| 汝州市| 宣化县| 凤山县| 崇礼县| 合肥市| 金堂县| 凉山| 天津市| 顺平县| 天气| 桦南县| 黑龙江省| 青州市| 微博| 碌曲县| 婺源县| 铁力市| 天祝| 青州市| 巩留县| 泾川县| 靖江市| 金阳县| 五河县| 双桥区| 太和县| 罗山县| 门头沟区| 嘉荫县| 寻乌县| 思南县| 临高县| 田阳县|