java实现日历选择器及使用方法
2011-05-17 17:00
666 查看
先贴代码:
使用方法是:
运行效果:
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.Serializable; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.swing.AbstractAction; import javax.swing.InputMap; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import cn.com.voltronic.ats.constants.Constants; public class MyCalendarPanel extends JDialog { /** * * @author Lincoln_Jia */ private static final long serialVersionUID = -1329364976709789113L; private JComboBox comboBoxMonth; private JSpinner spinnerYear; private MyJTable table; private MyJTableModel tableModel; private Calendar calendar; private String[] days = { "SUN", "MON", "TUR", "WED", "THU", "FRI", "SAT" }; private String[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; private int year = -1; private int month = -1; private int date = -1; private boolean flag = true; private JTextField textField; public MyCalendarPanel(JTextField textField) { super(); this.setModal(true); /*try { UIManager.setLookAndFeel(new WindowsLookAndFeel()); } catch (Exception ex) { ex.printStackTrace(); } SwingUtilities.updateComponentTreeUI(this);*/ this.textField = textField; this.calendar = Calendar.getInstance(); initComponent(); this.setIconImage(Constants.CONNECTEDIMG); this.setSize(300, 300); } public Calendar getCalendar() { return calendar; } public String getCalendarByDate() { DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd"); String time = dfmt.format(calendar.getTime()); return time; } private void initComponent() { this.setLayout(new BorderLayout()); setNorthPanel(); setCenterPanel(); eventListenter(); setData(); } private void setData() { year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH); date = calendar.get(Calendar.DATE); comboBoxMonth.setSelectedIndex(month); spinnerYear.setValue(new Integer(year)); } private void eventListenter() { spinnerYear.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { year = Integer.parseInt(String.valueOf(spinnerYear.getValue())); refreshTable(); } }); comboBoxMonth.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { month = comboBoxMonth.getSelectedIndex(); refreshTable(); } }); table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int row = table.rowAtPoint(e.getPoint()); int col = table.columnAtPoint(e.getPoint()); Object val = table.getValueAt(row, col); if (val != null && row != 0) { if (table.getSelectedRow() > -1 && table.getSelectedColumn() > -1) { date = Integer.parseInt(String.valueOf(table .getValueAt(table.getSelectedRow(), table .getSelectedColumn()))); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.DATE, date); } textField.setText(MyCalendarPanel.this.getCalendarByDate()); textField.requestFocus(); dispose(); } } }); AbstractAction right = (new AbstractAction() { private static final long serialVersionUID = -3429888240127305492L; public void actionPerformed(ActionEvent e) { if (table.getColumnCount() == table.getSelectedColumn() + 1) { table.changeSelection(table.getSelectedRow() + 1, 0, false, false); } else { table.changeSelection(table.getSelectedRow(), table .getSelectedColumn() + 1, false, false); } } }); AbstractAction left = (new AbstractAction() { private static final long serialVersionUID = -2487040789339112435L; public void actionPerformed(ActionEvent e) { if (0 > table.getSelectedColumn() - 1) { table.changeSelection(table.getSelectedRow() - 1, table .getColumnCount() - 1, false, false); } else { table.changeSelection(table.getSelectedRow(), table .getSelectedColumn() - 1, false, false); } } }); InputMap inputMap = table .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0); table.getActionMap().put(inputMap.get(keyStroke), right); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0); table.getActionMap().put(inputMap.get(keyStroke), left); } private void refreshTable() { for (int i = tableModel.getRowCount() - 1; i > 0; i--) { tableModel.removeRow(i); } calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); int maxDate = calendar.getActualMaximum(Calendar.DATE); calendar.set(Calendar.DATE, 1); int startDay = calendar.get(Calendar.DAY_OF_WEEK); for (int i = 0; i < 6; i++) { tableModel.addRow(new Object[7]); } int selectRow = -1; int selectColumn = -1; for (int i = 0; i < maxDate; i++) { int m = (int) ((startDay - 1) / 7) + 1; int n = (startDay - 1) % 7; tableModel.setValueAt(String.valueOf(i + 1), m, n); startDay = startDay + 1; if (date != -1 && date == i + 1) { selectRow = m; selectColumn = n; } } table.changeSelection(selectRow, selectColumn, false, false); } private void setCenterPanel() { table = new MyJTable(); tableModel = new MyJTableModel(); tableModel.setColumnIdentifiers(days); tableModel.addRow(days); table.setModel(tableModel); for (int i = 0; i < 7; i++) { table.getColumnModel().getColumn(i).setCellRenderer( new DefaultTableCellRenderer2()); } this.add(table, BorderLayout.CENTER); } private void setNorthPanel() { JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); comboBoxMonth = new JComboBox(); for (int i = 0; i < months.length; i++) { comboBoxMonth.addItem(months[i]); } comboBoxMonth.setSelectedIndex(-1); panel.add(comboBoxMonth); RolloverSpinnerListModel numberModel = new RolloverSpinnerListModel( 1980, 1980, 2099, 1); spinnerYear = new JSpinner(numberModel); JSpinner.NumberEditor numberEditor = new JSpinner.NumberEditor( spinnerYear, "####"); spinnerYear.setEditor(numberEditor); panel.add(spinnerYear); this.add(panel, BorderLayout.NORTH); } public static void main(String[] args) { // JFrame frame = new JFrame(); MyCalendarPanel calendarPanel = new MyCalendarPanel(null); // frame.getContentPane().add(calendarPanel, BorderLayout.CENTER); calendarPanel.setSize(300, 300); // calendarPanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); calendarPanel.setLocationRelativeTo(null); calendarPanel.setVisible(true); } protected void validateTree() { super.validateTree(); if (flag) { table.requestFocus(); flag = false; } } class DateBean implements Serializable{ private static final long serialVersionUID = 3010787830585461136L; private String dt; private String view; public DateBean(String dt, String view) { this.dt = dt; this.view = view; } public String getDt() { return dt; } public void setDt(String dt) { this.dt = dt; } public String getView() { return view; } public void setView(String view) { this.view = view; } @Override public String toString() { return view; } } class RolloverSpinnerListModel extends SpinnerNumberModel { private static final long serialVersionUID = 7366455425120197392L; public RolloverSpinnerListModel(int value, int minimum, int maximum, int stepSize) { super(value, minimum, maximum, stepSize); } public Object getNextValue() { Object returnValue = super.getNextValue(); if (returnValue == null) { returnValue = super.getMinimum(); } return returnValue; } public Object getPreviousValue() { Object returnValue = super.getPreviousValue(); if (returnValue == null) { returnValue = super.getMaximum(); } return returnValue; } } class MyJTable extends JTable { private static final long serialVersionUID = 2092799354481792367L; public MyJTable() { this.getTableHeader().setReorderingAllowed(false); this.getTableHeader().setResizingAllowed(false); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.setCellSelectionEnabled(true); this.setGridColor(Color.white); } public void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend) { if (this.getValueAt(rowIndex, columnIndex) == null) { return; } if (rowIndex == 0) { return; } super.changeSelection(rowIndex, columnIndex, toggle, extend); } public void repaint(int x, int y, int width, int height) { super.repaint(x, y, width, height); if (height > 0) { makeTableRowHeight(); } } protected void validateTree() { super.validateTree(); makeTableRowHeight(); } private void makeTableRowHeight() { int rowHeight = (int) ((this.getHeight() / 7) * 0.6); if (rowHeight > 0) { this.setRowHeight(0, rowHeight); } rowHeight = (int) ((this.getHeight() - rowHeight) / 6); if (rowHeight > 0) { for (int i = 1; i < 8; i++) { this.setRowHeight(i, rowHeight); } } } } class MyJTableModel extends DefaultTableModel { private static final long serialVersionUID = 3655520869200784738L; public boolean isCellEditable(int row, int column) { return false; } } class DefaultTableCellRenderer2 extends DefaultTableCellRenderer { private static final long serialVersionUID = -8779549993366848535L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.CENTER); if (row == 0) { component.setBackground(UIManager .getColor("Table.focusCellForeground")); component.setForeground(UIManager .getColor("Table.focusCellBackground")); return component; } else { if (isSelected) { component.setBackground(UIManager .getColor("Table.focusCellForeground")); component.setForeground(UIManager .getColor("Table.focusCellBackground")); } else { component.setBackground(UIManager .getColor("Table.focusCellBackground")); component.setForeground(UIManager .getColor("Table.focusCellForeground")); } if (column == 0 || column == 6) { component.setForeground(Color.red); } } return component; } } }
使用方法是:
MyCalendarPanel calendarPanel = new MyCalendarPanel(jTextField1); calendarPanel.setBounds(getX() + jLabel3.getX() + 30, getY() + jLabel3.getY() + 10, calendarPanel.getWidth(), calendarPanel.getHeight());//设置显示位置和大小 calendarPanel.setVisible(true);
运行效果:
相关文章推荐
- 使用Java语言借助Quartz jar包实现定时器的方法
- java基础问题---java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用
- 用Swig将c/c++程序转为java代码(使用swig实现java调用c、c++的方法)
- JAVA使用循环和递归方法实现斐波拉切数列
- 使用java的lambda表达式实现word count的两种方法
- 使用Java实现简单的server/client回显功能的方法介绍
- 详解Java注解的实现与使用方法
- 一个方法最多2个线程同时使用的JAVA实现
- 用java实现打印日历的方法
- JAVA实现多线程的两种方法,及如何使用
- (转)java使用jsp servlet来防止csrf 攻击的实现方法
- java开发线程篇1:java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- java中俩种方法实现一个线程,以及不推荐使用stop()和suspend()方法
- Java使用OCI驱动连接Oracle数据库实现方法
- 【Java面试题】23 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- Java使用agent实现main方法之前的实例详解
- 使用Java实现简单的server/client回显功能的方法介绍
- java使用common-httpclient包实现post请求方法示例
- Java编程___File各类方法使用(实现拷贝特定文件至特定目录下)
- java使用Filter实现自动登录的方法