`
5211422
  • 浏览: 209735 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

swing 初级学习(三)日期控件

    博客分类:
  • java
阅读更多

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class MyCalendar extends JApplet {

   
public static final String WEEK_SUN = "";

   
public static final String WEEK_MON = "";

   
public static final String WEEK_TUE = "";

   
public static final String WEEK_WED = "";

   
public static final String WEEK_THU = "";

   
public static final String WEEK_FRI = "";

   
public static final String WEEK_SAT = "";

   
public static final Color background = Color.white;

   
public static final Color foreground = Color.black;

   
public static final Color headerBackground = Color.blue;

   
public static final Color headerForeground = Color.white;

   
public static final Color selectedBackground = Color.blue;

   
public static final Color selectedForeground = Color.white;

   
private JPanel cPane;

   
private JLabel yearsLabel;

   
private JSpinner yearsSpinner;

   
private JLabel monthsLabel;

   
private JComboBox monthsComboBox;

   
private JTable daysTable;

   
private AbstractTableModel daysModel;

   
private Calendar calendar;

   
private String value;

   
public String getValue() {
       
return this.value;
    }

   
public MyCalendar() {
        cPane
= (JPanel) getContentPane();
    }

   
public void init() {
        cPane.setLayout(
new BorderLayout());

        calendar
= Calendar.getInstance();
        calendar
= Calendar.getInstance();
        yearsLabel
= new JLabel("年: ");
        yearsSpinner
= new JSpinner();
        yearsSpinner.setEditor(
new JSpinner.NumberEditor(yearsSpinner, "0000"));
        yearsSpinner.setValue(
new Integer(calendar.get(Calendar.YEAR)));
        yearsSpinner.addChangeListener(
new ChangeListener() {
           
public void stateChanged(ChangeEvent changeEvent) {
               
int day = calendar.get(Calendar.DAY_OF_MONTH);
                calendar.set(Calendar.DAY_OF_MONTH,
1);
                calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getValue())
                        .intValue());
               
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
                calendar
                        .set(Calendar.DAY_OF_MONTH, day
> maxDay ? maxDay : day);
                updateView();
            }
        });

        JPanel yearMonthPanel
= new JPanel();
        cPane.add(yearMonthPanel, BorderLayout.NORTH);
        yearMonthPanel.setLayout(
new BorderLayout());
        yearMonthPanel.add(
new JPanel(), BorderLayout.CENTER);
        JPanel yearPanel
= new JPanel();
        yearMonthPanel.add(yearPanel, BorderLayout.WEST);
        yearPanel.setLayout(
new BorderLayout());
        yearPanel.add(yearsLabel, BorderLayout.WEST);
        yearPanel.add(yearsSpinner, BorderLayout.CENTER);

        monthsLabel
= new JLabel("月: ");
        monthsComboBox
= new JComboBox();
       
for (int i = 1; i <= 12; i++) {
            monthsComboBox.addItem(
new Integer(i));
        }
        monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
        monthsComboBox.addActionListener(
new ActionListener() {
           
public void actionPerformed(ActionEvent actionEvent) {
               
int day = calendar.get(Calendar.DAY_OF_MONTH);
                calendar.set(Calendar.DAY_OF_MONTH,
1);
                calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex());
               
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
                calendar
                        .set(Calendar.DAY_OF_MONTH, day
> maxDay ? maxDay : day);
                updateView();
            }
        });
        JPanel monthPanel
= new JPanel();
        yearMonthPanel.add(monthPanel, BorderLayout.EAST);
        monthPanel.setLayout(
new BorderLayout());
        monthPanel.add(monthsLabel, BorderLayout.WEST);
        monthPanel.add(monthsComboBox, BorderLayout.CENTER);

        daysModel
= new AbstractTableModel() {
           
public int getRowCount() {
               
return 7;
            }

           
public int getColumnCount() {
               
return 7;
            }

           
public Object getValueAt(int row, int column) {
               
if (row == 0) {
                   
return getHeader(column);
                }
                row
--;
                Calendar calendar
= (Calendar) MyCalendar.this.calendar.clone();
                calendar.set(Calendar.DAY_OF_MONTH,
1);
               
int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
               
int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1;
               
int index = row * 7 + column;
               
int dayIndex = index - moreDayCount + 1;
               
if (index < moreDayCount || dayIndex > dayCount) {
                   
return null;
                }
else {
                   
return new Integer(dayIndex);
                }
            }
        };

        daysTable
= new CalendarTable(daysModel, calendar);
        daysTable.setCellSelectionEnabled(
true);
        daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        daysTable.addMouseListener(
new java.awt.event.MouseAdapter() {
           
public void mouseClicked(java.awt.event.MouseEvent e) {
               
if (e.getClickCount() == 2) {
                    Object o
= daysTable.getValueAt(daysTable.getSelectedRow(),
                            daysTable.getSelectedColumn());
                   
if (o != null) {
                       
// 不是点在空的格子,赋值
                        value = yearsSpinner.getValue()
                               
+ monthsComboBox.getSelectedItem().toString()
                               
+ o;
                        System.out.println(value);
                    }
else {
                       
// 否则清空
                        value = "";
                    }

                }
            }
        });
        daysTable.setDefaultRenderer(daysTable.getColumnClass(
0),
               
new TableCellRenderer() {
                   
public Component getTableCellRendererComponent(
                            JTable table, Object value,
boolean isSelected,
                           
boolean hasFocus, int row, int column) {
                        String text
= (value == null) ? "" : value.toString();
                        JLabel cell
= new JLabel(text);
                        cell.setOpaque(
true);
                       
if (row == 0) {
                            cell.setForeground(headerForeground);
                            cell.setBackground(headerBackground);
                        }
else {
                           
if (isSelected) {
                                cell.setForeground(selectedForeground);
                                cell.setBackground(selectedBackground);
                            }
else {
                                cell.setForeground(foreground);
                                cell.setBackground(background);
                            }
                        }

                       
return cell;
                    }
                });
        updateView();

        cPane.add(daysTable, BorderLayout.CENTER);
    }

   
public static String getHeader(int index) {
       
switch (index) {
       
case 0:
           
return WEEK_SUN;
       
case 1:
           
return WEEK_MON;
       
case 2:
           
return WEEK_TUE;
       
case 3:
           
return WEEK_WED;
       
case 4:
           
return WEEK_THU;
       
case 5:
           
return WEEK_FRI;
       
case 6:
           
return WEEK_SAT;
       
default:
           
return null;
        }
    }

   
public void updateView() {
        daysModel.fireTableDataChanged();
        daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),
                calendar.get(Calendar.WEEK_OF_MONTH));
        daysTable.setColumnSelectionInterval(
                calendar.get(Calendar.DAY_OF_WEEK)
- 1, calendar
                        .get(Calendar.DAY_OF_WEEK)
- 1);
    }

   
public static class CalendarTable extends JTable {
       
private Calendar calendar;

       
public CalendarTable(TableModel model, Calendar calendar) {
           
super(model);
           
this.calendar = calendar;
        }

       
public void changeSelection(int row, int column, boolean toggle,
               
boolean extend) {
           
super.changeSelection(row, column, toggle, extend);
           
if (row == 0) {
               
return;
            }
            Object obj
= getValueAt(row, column);
           
if (obj != null) {
                calendar.set(Calendar.DAY_OF_MONTH, ((Integer) obj).intValue());
            }
        }

    }

   
public static void main(String[] args) {
        JFrame frame
= new JFrame("Calendar Application");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MyCalendar myCalendar
= new MyCalendar();
        myCalendar.init();
        frame.getContentPane().add(myCalendar);
        frame.setSize(
240, 172);
        frame.show();

    }

}

分享到:
评论

相关推荐

    java swing 时间日期选择控件

    通过研究这些文件,开发者可以学习如何自定义日期格式、改变控件外观、添加事件监听器等高级特性,提升用户体验。 总的来说,Java Swing 的日期时间选择控件简化了日期和时间输入,提高了数据准确性,并且提供了...

    swing 日期选择控件

    这里提到的"swing 日期选择控件"很可能是指一个第三方库,用于在Swing应用中添加日期选择功能。 `java swing`标签表明了我们讨论的是与Java Swing框架相关的编程内容。Swing是Java的一个图形用户界面(GUI)工具包...

    java Swing日期控件

    在 Swing 中,日期控件主要用于用户交互,允许用户选择或输入日期。这些控件使得应用程序可以方便地处理与日期相关的功能,例如日程管理、事件记录等。 在Java Swing 中,最常用的日期控件是 JCalendar 和 ...

    java swing 日期控件

    在Swing中,日期控件主要用于显示和选择日期,为用户提供直观的日期选择界面。本篇文章将深入探讨Java Swing中的日期控件,包括其功能、用法以及相关的API。 ### 1. `JDatePicker` `JDatePicker` 是Swing中最常用...

    JAVA Swing日期选择控件datepicker

    在Swing中,DatePicker是一个非常实用的控件,允许用户方便地选择日期,通常用于输入或显示日期相关的数据。在Java Swing中并没有内置的DatePicker组件,但开发者可以借助第三方库来实现这一功能,例如JCalendar。 ...

    JAVA SWING 日期控件(目前支持JLable和JTextField,若有需要可自行扩展其它控件)

    2. **自定义日期控件**:通常,Java Swing没有内置的日期选择器,但开发者可以使用诸如JCalendar、JDatePicker等第三方库,或者像这个博客中提到的那样,创建自己的日期选择组件。DateChooser.java文件很可能是这个...

    swing 仿windows日期时间控件

    swing 仿windows日期时间控件

    Java实现日期选择,一个简单的Java Swing时间日期选择控件的代码示例,带有中文注释

    一个简单的Java Swing时间日期选择控件的代码示例,带有中文注释 代码创建了一个简单的Java Swing时间日期选择器,包含一个输入框、一个按钮和一个日期标签。 当点击按钮时,会获取当前时间日期并显示在输入框中。 ...

    Swing 日期控件(包含源代码)

    通过学习和理解这个源代码,开发者不仅可以掌握如何在Swing中创建自定义日期控件,还可以了解到如何扩展基础组件以添加额外功能。这对于那些需要在Swing应用中提供高级日期选择功能的开发者来说非常有价值。 在实践...

    Swing 日期控件(jar包)

    在处理日期和时间选择时,Swing虽然没有内置的日期选择器,但可以通过第三方库来实现,例如"JDateField.jar"就是这样一个专门用于日期输入的控件。 "JDateField.jar"是一个第三方库,它提供了日期选择的功能,使得...

    JavaSwing界面设计(所有控件及示例)

    Java Swing 是Java编程语言中用于构建图形用户界面(GUI)的一个强大的工具包。它是对早期的Abstract Window Toolkit (AWT) 的扩展,提供了更丰富的功能和更好的平台独立性。Swing 包含了大量的组件,使得开发者可以...

    java swing的日期控件

    在Swing中,处理日期选择的控件主要是JCalendar和JDatePicker。这两个组件可以帮助用户在界面上选择日期,并且可以方便地与应用程序的其他部分进行交互。 首先,我们来看JCalendar。JCalendar是一个非标准的Swing...

    SWING实现的日期控件

    用swing做的日期控件,包含源文件和执行JAR文件。

    Swing日期选择控件

    Swing居然没有日期选择控件,在网上找了半天,要么很丑,要么就要钱,于是自己写了一个,感觉还行,呵(王婆卖瓜了)! 目前只有日期选择控件,以后扩充!

    Swing日期选择控件(对原控件作了一些修改,增加了月份选择的控件)

    Swing日期选择控件,对原控件作了一些修改,增加了月份选择的控件。把图标换成了黑白的了,感觉彩色的太花。 xDatePicker是日期选择控件 xMonthPicker是月份选择控件

    JAVA Swing日期选择控件datepicker的使用

    总结,使用Java Swing实现日期选择控件主要依赖于第三方库,如JCalendar或SwingX。它们提供了易于使用的DatePicker组件,并且可以方便地进行事件监听和国际化设置。对于不希望引入外部库的项目,可以考虑自定义组件...

    Swing DatePicker 时间日期控件

    Swing DatePicker 时间日期控件是Java Swing库中的一个重要组件,用于在GUI应用程序中提供用户友好的界面,让用户能够选择日期。这个控件通常被用在需要用户输入特定日期的场景,比如日程安排、预订系统或者任何需要...

    java swing 时间控件

    总结,Java Swing虽然没有内置的时间控件,但通过组合现有的组件,结合第三方库,我们可以创建出功能丰富的日期和时间选择器。事件监听和回调机制使得这些控件能够与用户进行交互,并执行相应的操作。在实际开发中,...

    swing时间选择控件

    总结来说,Swing时间选择控件为Java桌面应用提供了灵活的日期和时间输入方式。开发者可以根据项目需求选择JCalendar、JSpinner或其他自定义解决方案,并结合事件处理、布局管理和测试,构建出用户友好的时间选择功能...

Global site tag (gtag.js) - Google Analytics