package t;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
public class MyCalendar extends JFrame implements Runnable {
private static final long serialVersionUID = 5824544048074206949L;
public static final String WEEK_SUN = "SUN";
public static final String WEEK_MON = "MON";
public static final String WEEK_TUE = "TUE";
public static final String WEEK_WED = "WED";
public static final String WEEK_THU = "THU";
public static final String WEEK_FRI = "FRI";
public static final String WEEK_SAT = "SAT";
private javax.swing.JMenuItem miWriteDayMemo;
public static final Color background = Color.white; //设置背景色
public static final Color foreground = Color.black;//设置前景色
public static final Color headerBackground = Color.lightGray; //设置标题行的背景色
public static final Color headerForeground = Color.BLACK; //设置标题行的前景色
public static final Color selectedBackground = Color.blue; //设置选中cell的背景色
public static final Color selectedForeground = Color.white;//设置标选中cell的前景色
JPopupMenu pm ;
private JPanel cPane;
private JLabel yearsLabel;
private JSpinner yearsSpinner;
private JLabel monthsLabel,currentTime;
private JComboBox monthsComboBox;
private JTable daysTable;
private AbstractTableModel daysModel;
private Calendar calendar;
private int count = 10;
private String today = "";
private String finalToday = "";
private SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
private Date now = new Date();
PopupMenu popupMenu1 = new PopupMenu();
MenuItem menuItem1 = new MenuItem();
MenuItem menuItem2 = new MenuItem();
MenuItem menuItem3 = new MenuItem();
public MyCalendar(String s) {
super(s);
finalToday = sdfDate.format(now);
setSize(400, 300);
setLocation(120, 120);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MenuBar1();
init();
}
public void init() {
Container con = getContentPane();
//con.setLayout(new BorderLayout());
cPane=new JPanel();
con.add(cPane);
JPanel Panel=new JPanel();
cPane.setLayout(new BorderLayout());
cPane.add(Panel,BorderLayout.NORTH);
currentTime=new JLabel("");
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();
}
});
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的当前值为当前月份
//添加侦听器(每次点击时)
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();
}
});
Panel.add(yearsLabel);
Panel.add(yearsSpinner);
Panel.add(monthsLabel);
Panel.add(monthsComboBox);
Panel.add(currentTime);
//设置一个要设置一个 7 行 7 列的表,详见API
daysModel = new AbstractTableModel() {
private static final long serialVersionUID = -6432324501689814210L;
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 firstDay = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int index = row * 7 + column;
int dayIndex = index - firstDay + 1;
if (index < firstDay || dayIndex > dayCount) {
return null;
} else {
return new Integer(dayIndex);
}
}
};
daysTable = new CalendarTable(daysModel, calendar);
daysTable.setCellSelectionEnabled(true);//设置此表是否允许同时存在行选择和列选择。当允许时,表将行选择模型和列选择模型的相交部分作为选定的单元格
daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
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); //如果为 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);
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();
con.validate(); //取得容器上的所有组件
validate();
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
public class MyCalendar extends JFrame implements Runnable {
private static final long serialVersionUID = 5824544048074206949L;
public static final String WEEK_SUN = "SUN";
public static final String WEEK_MON = "MON";
public static final String WEEK_TUE = "TUE";
public static final String WEEK_WED = "WED";
public static final String WEEK_THU = "THU";
public static final String WEEK_FRI = "FRI";
public static final String WEEK_SAT = "SAT";
private javax.swing.JMenuItem miWriteDayMemo;
public static final Color background = Color.white; //设置背景色
public static final Color foreground = Color.black;//设置前景色
public static final Color headerBackground = Color.lightGray; //设置标题行的背景色
public static final Color headerForeground = Color.BLACK; //设置标题行的前景色
public static final Color selectedBackground = Color.blue; //设置选中cell的背景色
public static final Color selectedForeground = Color.white;//设置标选中cell的前景色
JPopupMenu pm ;
private JPanel cPane;
private JLabel yearsLabel;
private JSpinner yearsSpinner;
private JLabel monthsLabel,currentTime;
private JComboBox monthsComboBox;
private JTable daysTable;
private AbstractTableModel daysModel;
private Calendar calendar;
private int count = 10;
private String today = "";
private String finalToday = "";
private SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
private Date now = new Date();
PopupMenu popupMenu1 = new PopupMenu();
MenuItem menuItem1 = new MenuItem();
MenuItem menuItem2 = new MenuItem();
MenuItem menuItem3 = new MenuItem();
public MyCalendar(String s) {
super(s);
finalToday = sdfDate.format(now);
setSize(400, 300);
setLocation(120, 120);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MenuBar1();
init();
}
public void init() {
Container con = getContentPane();
//con.setLayout(new BorderLayout());
cPane=new JPanel();
con.add(cPane);
JPanel Panel=new JPanel();
cPane.setLayout(new BorderLayout());
cPane.add(Panel,BorderLayout.NORTH);
currentTime=new JLabel("");
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();
}
});
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的当前值为当前月份
//添加侦听器(每次点击时)
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();
}
});
Panel.add(yearsLabel);
Panel.add(yearsSpinner);
Panel.add(monthsLabel);
Panel.add(monthsComboBox);
Panel.add(currentTime);
//设置一个要设置一个 7 行 7 列的表,详见API
daysModel = new AbstractTableModel() {
private static final long serialVersionUID = -6432324501689814210L;
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 firstDay = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int index = row * 7 + column;
int dayIndex = index - firstDay + 1;
if (index < firstDay || dayIndex > dayCount) {
return null;
} else {
return new Integer(dayIndex);
}
}
};
daysTable = new CalendarTable(daysModel, calendar);
daysTable.setCellSelectionEnabled(true);//设置此表是否允许同时存在行选择和列选择。当允许时,表将行选择模型和列选择模型的相交部分作为选定的单元格
daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
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); //如果为 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);
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();
con.validate(); //取得容器上的所有组件
validate();
}
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;public class e extends JDialog { JLabel label1, label2;
public JPanel panel,pane2;
JButton btnsave,btnrewrite;
JScrollPane spTa;
JTextArea taMsg ;
Container con = getContentPane();
private static final String path = "D:/java/Memo.BOX";
private File file = null;
private String date;
// private boolean a2;
//JFrame b;
public e(String date)
{
setSize(300, 200);
setLocation(220, 120);
setVisible(true);
a();
this.date = date;
setTitle("编写备忘录 " + date);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
}
public void a()
{
con.setLayout(new GridLayout(2,1));//设置GridLayout布局
con.setLayout(new BorderLayout());
//spTa.setBackground(new java.awt.Color(255, 255, 255));
//spTa.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 255), 1, true), "备忘录内容"));
//taMsg.setColumns(20);
//taMsg.setLineWrap(true);
//taMsg.setRows(5);
///spTa.setViewportView(taMsg);
//spTa.add(taMsg);
btnsave=new JButton("保存");
btnrewrite=new JButton("重写"); taMsg=new JTextArea();
taMsg.setColumns(20);
taMsg.setLineWrap(true);//设置文本区的换行策略
taMsg.setRows(5); //设置此 TextArea 的行数。
taMsg.setBorder(BorderFactory.createTitledBorder("请写备忘录"));
//taMsg.setBorder(BorderFactory.createTitledBorder(""));
spTa=new JScrollPane(taMsg);//将JTextArea加到滚动条;
con.add(spTa);//居中显示 //con.add(spTa,BorderLayout.CENTER);//居中显示
panel = new JPanel();
con.add(panel,BorderLayout.SOUTH);
panel.add(btnsave);
panel.add(btnrewrite);
btnrewrite.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
btnrewritetActionPerformed(evt);
}
});
btnsave.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
btnsaveActionPerformed(evt);
}
});
con.validate(); //取得容器上的所有组件
validate();
}
protected void btnsaveActionPerformed(ActionEvent evt) {
saveMemo();
}
public void btnrewritetActionPerformed(ActionEvent evt) {
taMsg.setText("");
taMsg.grabFocus();
}
private void saveMemo() {
//获取文本区域中的内容
String memo = taMsg.getText().trim();
//创建一个用于保存内容的字符串
String writeFile = new String();
//创建一个用于读取原文件内容的字符串
String readFile = new String();
//若本次编写备忘录内容为空,则提示用户
if (memo.length() == 0) {
JOptionPane.showMessageDialog(this, "备忘录内容不能为空");
return;
}
//文件不存在时需要自动创建
if (file == null) {
file = new File(path);
}
if (!file.exists()) {
try {
//创建文件必须的文件夹
file.getParentFile().mkdirs();
//创建相应文件
file.createNewFile();
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "创建备忘录文件失败!");
return;
}
}
try {
//从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
while ((readFile = bf.readLine()) != null) { //读取一个文本行
//将读取到的文本行保存下来并在其后面加上回车(即同时换行)
writeFile += readFile + "\r\n";
}
//关闭字符输入流
bf.close();
//在原文件内容中加入本次的备忘录内容(注意必须加日期)
writeFile += date + "," + memo;
//将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
//写入字符串
bw.write(writeFile);
//关闭字符输出流
bw.close();
JOptionPane.showMessageDialog(this, "已保存");
} catch (Exception e) {
System.out.println("------" + e.getMessage() + "------");
}
}
}
这是一个java日历备忘录,现在只能添加当天的备忘录,请大家帮忙改写下,使他可以写随便选择的一天的备忘录,请大家帮忙啊