Java JTable 实现日历的示例

效果图:

主要思想:日历最核心的功能就是能显示某年某月对应的日期和星期几。因此只要实现传入具体的年份和月份,得到一组存放了日期的数组a[ ]即可。其中数组的大小设置成42,要考虑的问题是当月的第一天对应星期几。日期数组中的前七个,肯定包含了当月的第一天,把这一天找到,将“1”填入,后面的日期依次累加直到加完该月最后一天为止。

MyCalendar类:

得到用于显示日期数组a[ ]

import java.util.Calendar;

public class MyCalendar {
String day[];
int year = 2020,month=0;

public String[] getDay() {
return day;
}
public void setDay(String[] day) {
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
private boolean isLeapYear() {
if(this.year%4==0 && this.year%100!=0){
return true;
}else
if(this.year%400==0){
return true;
}else

return false;
}

//获得显示数组
public String[] getCalendar(){
Calendar calendar=Calendar.getInstance();
String a[]=new String[42];
calendar.set(year,month-1,1);
int weekday=calendar.get(Calendar.DAY_OF_WEEK)-1;
int day=0;
int days = 31;
if (this.month == 4 || this.month == 6 || this.month == 9 || this.month == 11)
days = 30;
if (this.month == 2 && isLeapYear())
days = 29;
if (this.month == 2 && !isLeapYear())
days = 28;

for(int i = weekday,n=1;i< weekday +days;i++){
a[i]=String.valueOf(n);
n++;
}
return a;
}

}

MyFrame类:

创造显示面板,主要用到JTable。

public class MyFrame extends JFrame implements ActionListener {
//存储数据
MyCalendar calendar = new MyCalendar();
JComboBox choiceYear,choiceMonth;
JTable table = null;
JPanel root = new JPanel();
JLabel lyear, lmonth;

private Object[] name = {"日","一","二","三","四","五","六"};
private TableModel tableModel = new DefaultTableModel(name,6);

//  private static int row = 6;
//  private static int column = 7;

public MyFrame(String title) {
super(title);

this.setContentPane(root);
root.setLayout(new BorderLayout());
//年月选择栏
choiceYear=new JComboBox();
choiceMonth=new JComboBox();
lyear=new JLabel("年");
lmonth=new JLabel("月 ");
for(int i=1990;i<2050;i++)
choiceYear.addItem(i);
choiceYear.addActionListener(this);
for(int i=1;i<=12;i++)
choiceMonth.addItem(i);
choiceMonth.addActionListener(this);

JPanel pNorth=new JPanel();

pNorth.add(choiceYear);
pNorth.add(lyear);
pNorth.add(choiceMonth);
pNorth.add(lmonth);
root.add(pNorth,BorderLayout.NORTH);

// 表格初始化
setYearAndMonth( 1990, 1);

}

//设置年月日
public void setYearAndMonth(int y,int m){
calendar.setYear(y);
calendar.setMonth(m);
String day[]=calendar.getCalendar();
Vector<Object> rowData = new Vector<>();
int row = 0;
int column = 0;
for(int i = 0; i< 42; i++) {
row = i / 7;
column = i % 7;

tableModel.setValueAt(day[i], row, column);

}

// 创建 JTable,直接重写 isCellEditable(),设为不可编辑
table = new JTable(tableModel){
@Override
public boolean isCellEditable(int row, int column)
{
return false;
}
};
JScrollPane scrollPane = new JScrollPane(table);
root.add(scrollPane, BorderLayout.CENTER);

// 添加到主界面
table.setFillsViewportHeight(true);
table.setRowSelectionAllowed(true); // 整行选择
table.setRowHeight(30);
}

public void actionPerformed(ActionEvent e){

//选择年份
if (e.getSource()==choiceYear){
calendar.setYear((Integer) choiceYear.getSelectedItem());
String day[]=calendar.getCalendar();
Vector<Object> rowData = new Vector<>();
int row = 0;
int column = 0;
for(int i = 0; i< 42; i++) {
row = i / 7;
column = i % 7;

tableModel.setValueAt(day[i], row, column);

}
table = new JTable(tableModel){
@Override
public boolean isCellEditable(int row, int column)
{
return false;
}
};
JScrollPane scrollPane = new JScrollPane(table);
root.add(scrollPane, BorderLayout.CENTER);

// 添加到主界面
table.setFillsViewportHeight(true);
table.setRowSelectionAllowed(true); // 整行选择
table.setRowHeight(30);
}
//选择月份
else if (e.getSource()==choiceMonth){
calendar.setMonth((Integer) choiceMonth.getSelectedItem());
String day[]=calendar.getCalendar();
Vector<Object> rowData = new Vector<>();
int row = 0;
int column = 0;
for(int i = 0; i< 42; i++) {
row = i / 7;
column = i % 7;

tableModel.setValueAt(day[i], row, column);

}
}
table = new JTable(tableModel){
@Override
public boolean isCellEditable(int row, int column)
{
return false;
}
};
JScrollPane scrollPane = new JScrollPane(table);
root.add(scrollPane, BorderLayout.CENTER);

// 添加到主界面
table.setFillsViewportHeight(true);
table.setRowSelectionAllowed(true); // 整行选择
table.setRowHeight(30);  

}

}

ShowView类:

用于显示窗口,照抄即可,无需理解。

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ShowView
{
  private static void createGUI()
  {

    // 语法:因为MyFrame是JFrame的子类,所以可以这么写
    JFrame frame = new MyFrame("日历");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // 设置窗口的其他参数,如窗口大小
    frame.setSize(400, 300);

    // 显示窗口
    frame.setVisible(true);

  }

  public static void main(String[] args)
  {
    // 此段代码间接地调用了 createGUI()

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run()
      {
        createGUI();
      }
    });

  }
}

以上就是Java JTable 实现日历的示例的详细内容,更多关于Java JTable 实现日历的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java Swing组件编程之JTable表格用法实例详解

    本文实例讲述了Java Swing组件编程之JTable表格用法.分享给大家供大家参考,具体如下: 表格是GUI编程中使用较多,但也是最麻烦的一个控件之一.表格是用来显示二维数据,提供编辑,选择等功能.如果只是显示数据,这还是非常easy的,只要在JTable中传入二维数组或集合就可以了. 示例1: package awtDemo; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTab

  • java控制台实现可视化日历小程序

    本文实例为大家分享了java可视化日历小程序的具体代码,供大家参考,具体内容如下 废话不多说,直接上代码 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * 可视化日历程序

  • Java Swing中的表格(JTable)和树(JTree)组件使用实例

    一:表格(JTable): 1.基本概念: 表格(JTable)是Swing 新增加的组件,主要是为了将数据以表格的形式显示.给显示大块数据提供了简单的机制. 2.常用构造方法: * JTable():使用系统默认的模型创建一个JTable 实例.  * JTable(int numRows,int numColumns):创建一个使用DefaultTableModel 指定行.列的空表格.  * JTable(Object[ ][ ] rowData,Object[ ][ ] columnNa

  • Java Swing中JTable渲染器与编辑器用法示例

    本文实例讲述了Java Swing中JTable渲染器与编辑器用法.分享给大家供大家参考,具体如下: JTable的内容.外观.事件响应在很大程度上是由渲染器与编辑器控制的.具体说来,渲染器负责单元格的外观比如前景色.背景色,以及单元格提示:编辑器负责单元格的内容和事件响应.编辑器默认为文本框形式,也可以使用下拉菜单.按钮.单选按钮等形式.下面通过一个demo程序来说明渲染器与编辑器的基本用法. JButtonTableExample.java package awtDemo; import j

  • java实现可视化日历

    java可视化日历程序,供大家参考,具体内容如下 利用DateFormat以及Calendar等方法来实现. package 尚学堂; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar;

  • Java基于Calendar类输出指定年份和月份的日历代码实例

    这篇文章主要介绍了Java 使用Calendar类输出指定年份和月份的日历,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 package com.cyl.test3; import java.util.Calendar; import java.util.Scanner; public class RiLi { public static void main(String[] args){ int year= 2020; int mo

  • Java表格JTable代码实例解析

    代码如下: import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.JScrollPane; import javax.swing.JFrame; import javax.swing.JOptionPane; import java.awt.*; import java.awt.event.*; public class JTableDemo extends JFram

  • Java Calendar日历类原理及使用方法

    这篇文章主要介绍了Java Calendar日历类原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java.util.Calendar 是日历类,在Date后出现,替换掉了许多Date的方法.该类将所有可能用到的时间信息封装为静态成员变量,方便获取.日历类就是方便获取各个时间属性的.Calendar类无法直接创建对象使用,里边有一个静态方法getInstance(),该方法返回了Calendar类的子类对象.Calendar类中提

  • java控制台打印本月的日历

    Java在控制台打印本月日历 在学习<Java核心技术卷I·基础知识>第10版 的时候里面有一个小例子,就是在控制台上打印日历的一个例子,就想自己试试. 代码如下: import java.time.LocalDate; public class TestScanner { public static void main(String[] args) { rili(); } private static void rili() { System.out.println(" Mon T

  • Java Swing实现JTable检测单元格数据变更事件的方法示例

    本文实例讲述了Java Swing实现JTable检测单元格数据变更事件的方法.分享给大家供大家参考,具体如下: 在JTable的初级教程中往往会提到,使用TableModel的 addTableModelListener方法可以监听单元格数据的变更,在其事件处理函,数tableChanged中,可以通过e.getColumn(),e.getFirstRow(),e.getLastRow(),e.getType()来获取变更发生的位置和变更的类型(插入.更新或删除).然而该方法存在2个致命的问题

随机推荐