问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用table做万年历

发布网友 发布时间:2022-04-09 05:29

我来回答

1个回答

热心网友 时间:2022-04-09 06:59

先上张效果图:以下是实现代码:/*日历*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.regex.Pattern;

import javax.swing.*;

public class Demo28 extends JFrame {

int m = 1;
String[] monthchoose = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12" }; // 存放月份的字符数组

String[] columnNames = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; // 存放星期的字符数组
Calendar ca = Calendar.getInstance();
Container contentPane = getContentPane();
Vector<String> vector = new Vector<String>();
String[][] date = new String[6][7]; // 表格的显示数据的格式
TextField tf; // 文本框的值代表的是年份
JComboBox jb;
JTable table; // 把日期用table的方式显示出来

public void getDate(String year, String month, String week, int Max_Day) {
int n = 0, b = 0;

// 动态把传进来月份的天数存放到容器里
for (int j = 1; j <= Max_Day; j++) {
vector.add(String.valueOf(j));
}

//每次往table里添加数据的时候,都预先把原table里 的 数据清空
for(int x = 0;x<date.length;x++){
for(int y = 0;y<date[x].length;y++){
date[x][y] = null;
}
}

// 根据传进来月份的第一天是星期几,来构建Table
for (int a = Integer.parseInt(week) - 1; a < date[0].length; a++) {
date[0][a] = new String((String) vector.toArray()[n]);
n++;
}

for (int i = 1; i < date.length; i++) {
for (int j = 0; j < date[i].length; j++) {
if (n < vector.size()) {
date[i][j] = new String((String) vector.toArray()[n]);
n++;
} else
break;
}
}

// 把容器里的数据全部清除,以备下次再存放新的数据
while (b < vector.size()) {
vector.remove(b);
}
}

public void chooseDate(String day) {
JLabel label = new JLabel();

for (int y = 0; y < date.length; y++) {
for (int z = 0; z < date[y].length; z++) {
System.out.print(date[y][z] + " ");
System.out.println(day);
if (date[y][z] != null) {
if (date[y][z].equals(day)) {
table.setSelectionBackground(Color.yellow);
return;
}
}
}
}
}

public void paint() {
setTitle("日历");
setBounds(200, 200, 350, 178);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
int m = 0;
String year = String.valueOf(ca.get(Calendar.YEAR)); // 得到当前的系统时间的年份,并把这个数值存放到year这个变量里
String month = String.valueOf(ca.get(Calendar.MONTH) + 1); // 得到当前的系统时间的月份,并把这个数值存放到month这个变量里
String day = String.valueOf(ca.get(Calendar.DATE)); // 得到当前的系统时间的日期,并把这个数值存放到day这个变量里

ca.set(Calendar.DATE, 1); // 把Calendar 对象的DATA设置为1
String week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根据设置的Calendar对象,计算出这个月第一天是星期几
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 得到当前系统时间月份有多少天
getDate(year, month, week, Max_Day);

// 从月份数组里取出与当前系统时间一样的月份值
for (int i = 0; i < monthchoose.length; i++) {
if (monthchoose[i].equals(month)) {
m = i;
}
}

JToolBar toolBar = new JToolBar();
JButton b1 = new JButton("<");
b1.addMouseListener(new myMouseListener1());
JButton b2 = new JButton(">");
b2.addMouseListener(new myMouseListener2());
JLabel j1 = new JLabel("年");
JLabel j2 = new JLabel("月");
tf = new TextField(5);
tf.addKeyListener(new myKeyListener());
tf.setText(year);
jb = new JComboBox(monthchoose);
jb.setSelectedIndex(m);
jb.addActionListener(new myActionListener3());

table = new JTable(date, columnNames);
//table.addMouseListener(new tableMouseListener());
table.setPreferredScrollableViewportSize(new Dimension(350, 150));
JScrollPane jsp = new JScrollPane(table);
contentPane.add(jsp, BorderLayout.CENTER);

chooseDate(day);

toolBar.add(b1);
toolBar.add(tf);
toolBar.add(b2);
toolBar.add(j1);
toolBar.add(jb);
toolBar.add(j2);
toolBar.setLocation(0, 0);
toolBar.setSize(400, 15);
contentPane.add(toolBar, BorderLayout.NORTH);

setVisible(true);
new Thread(new PaintThread()).start(); // 调用内部类PaintThread,根据里面的设置来重画

}

public static void main(String[] args) {
Demo28 d28 = new Demo28();
d28.paint();
}

// 鼠标单击左边按钮触发的事件
class myMouseListener1 extends MouseAdapter {

public void mouseClicked(MouseEvent e) {
String str = tf.getText().trim(); // 得到文本框的值
int i = Integer.parseInt(str);
i = i - 1;
tf.setText(String.valueOf(i));
String new_year = String.valueOf(i); // 把表示年份的文本框的值存放到变量new_year里
ca.set(Calendar.YEAR, i); // 把Calendar 对象的YEAR设置为用户设置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar对象的MONTH设置为用户设置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 对象的DATA设置为1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根据设置的Calendar对象,计算出这个月第一天是星期几
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根据设置后的Calendar对象计算这个月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}

class myKeyListener extends KeyAdapter {

public void keyReleased(KeyEvent e) {
try {
int i = Integer.parseInt(tf.getText().trim());
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
String new_year = String.valueOf(i);
ca.set(Calendar.YEAR, i); // 把Calendar对象的YEAR设置为用户设置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar对象的MONTH设置为用户设置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 对象的DATA设置为1
String new_week = String.valueOf(ca
.get(Calendar.DAY_OF_WEEK)); // 根据设置的Calendar对象,计算出这个月第一天是星期几
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根据设置后的Calendar对象计算这个月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
} catch (NumberFormatException excption) {
System.out.println("你输入的年份不正确!");
}

}

}

// 鼠标单击右边按钮触发的事件
class myMouseListener2 extends MouseAdapter {

public void mouseClicked(MouseEvent e) {
String str = tf.getText().trim();
int i = Integer.parseInt(str);
i = i + 1;
tf.setText(String.valueOf(i));
String new_year = String.valueOf(i); // 把表示年份的文本框的值存放到变量new_year里
ca.set(Calendar.YEAR, i); // 把Calendar 对象的YEAR设置为用户设置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar对象的MONTH设置为用户设置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 对象的DATA设置为1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根据设置的Calendar对象,计算出这个月第一天是星期几
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根据设置后的Calendar对象计算这个月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}

// 鼠标单击选择框触发的事件
class myActionListener3 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String new_year = String.valueOf(ca.get(Calendar.YEAR)); // 把表示年份的文本框的值存放到变量new_year里
String new_month = (String) jb.getSelectedItem(); // 得到用户设置的月份
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar对象的月份值设置为用户定义的月份
ca.set(Calendar.DATE, 1); // 把Calendar 对象的DATA设置为1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根据设置的Calendar对象,计算出这个月第一天是星期几
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根据设置后的Calendar对象计算这个月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}

// 重画组件
private class PaintThread implements Runnable {

public void run() {
while (true) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见和同性发生关糸了 梦见和同性朋友发生亲密关系 学生党如何科学护肤? 学生党该怎么基础护肤? 有什么美容护肤的技巧适合学生党? 怎么@全部成员啊? 新洲摩尔城一楼小吃租金多少 武汉王家湾有哪些广场 你好 请问 晚上6点开始 学瑜伽 可以吗? 因为我想在下班时间去 锻炼锻 ... 电脑联网有哪些条件台式电脑无线上网需要具备哪些条件 远程连接linux服务器如何修改自己的ip 关于板载显卡与独立显卡多屏显示的问题,急求答案。 电脑主机上的板载显卡+独立显卡可否组合多屏(连接多个显示器)? 多屏卡和独立显卡能同时使用吗? 多屏显卡可以可以直接在没有核显和集显和搭配其他独立显卡,使用吗? 你好!怎么将独立显卡组建多屏即可实现? 多屏用的,可以组四分屏显卡该如何选择 母亲节赞美母亲的话 赞美母亲节的词句 电脑屏幕分辨率应该是多少? 母亲节,赞扬母亲节的诗词,必须得古风 赞美母亲节的诗歌 一键还原了怎么办? 一键还原工具怎么使用恢复 一键还原怎么用呀? 三文鱼的介绍 我们常吃的是哪种三文鱼 《烛光里的妈妈》母亲节歌颂母爱 瞄准大结局最后谁死了 关于中国母亲节的诗歌 夏季怎么吃西瓜减肥 夏天吃西瓜能减肥吗? 夏天吃水果西瓜会减肥吗? 夏天吃西瓜可以减肥吗 夏天减肥不吃饭而吃西瓜 可以瘦身么 夏天多食西瓜能减肥吗拜托各位了 3Q 本笔记本电脑怎样触摸屏变成手写板, 夏天吃西瓜做晚餐能够减肥不? 把笔记本的触摸板变成手写板 夏天吃西瓜能不能减肥吗 什么是排量 排量是什么? 两个人去哈尔滨游乐园玩,如果把具有挑战性的都玩一次 大约要多少钱!? 在哈尔滨玩一周左右需要多少钱?两个人 去哈尔滨游乐园两个人玩一次大概多少钱 哈尔滨旅游一趟一天两个人大约得多少钱啊 汽车排量是什么? 什么是排量? 两个人去哈尔滨玩四天要多少钱? 汽车发动机排量大小是什么意思?