import java.text.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import javax.imageio.*;
import java.awt.image.BufferedImage;
public class GuiDemo4{
public static void main(String[] args){
GuiDemo4 gui = new GuiDemo4();
gui.go();
}
public void go(){
//创建 JFrame
JFrame frame = new JFrame();
//窗口关闭退出应该程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//画图
MyDrawPanel drawPanel = new MyDrawPanel();
frame.getContentPane().add(drawPanel);
//设置大小、可见
frame.setSize(300,300);
frame.setVisible(true);
drawPanel.repaint();
File f = new File("test.jpg");
exportOtherShapesImage(f, drawPanel);
}
//保存为图片
public boolean exportOtherShapesImage(File f, MyDrawPanel panel) {
Dimension imageSize = panel.getSize();
BufferedImage image = new BufferedImage(imageSize.width, imageSize.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
panel.paint(g);
g.dispose();
try {
ImageIO.write(image, "png", f);
} catch (IOException e) {
e.printStackTrace();
return false;
}
System.out.println("export Image -->" + f.getAbsoluteFile());
return true;
}
class MyDrawPanel extends JPanel{
public void paintComponent(Graphics g) {
//画圆角矩形
g.drawRoundRect(10, 10, 260, 260, 10, 10);
g.drawRoundRect(12, 12, 256, 256, 8, 8);
//设置字体
Font font1 = new Font("TimesRoman", Font.PLAIN, 15);
Font font2 = new Font("TimesRoman", Font.BOLD, 18);
g.setFont(font1);
//当前日期
Calendar calendar = Calendar.getInstance();
//设置指定日期(注意月份范围是0-11)
//calendar.set(2013, 10, 9);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
//当前月的第一天是星期几
int day1st = getWeeksOfDate(year, month, 1);
//当前月有多少天
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int startX = 25; //开始的X轴位置
int startY = 28; //开始的Y轴位置
int posLen = 35; //每次移动的位置长度
int x = startX + day1st * posLen; //1号的开始X轴位置
int y = startY + posLen * 2;//1号的开始Y轴位置
//画年月日
String currentDate = year + "年" + (month + 1) + "月" + day + "日";
g.drawString(currentDate, 100, startY);
//画年月日下面的直线
g.drawLine(12, startY+8, 267, startY+8);
//画星期
String[] weeks = new String[] {"日", "一", "二", "三", "四", "五", "六"};
for (int i = 0; i < weeks.length; i++)
g.drawString(weeks[i], startX + posLen * i, startY + posLen);
//画日期
for (int j = 1; j <= days; j++){
if (j == day){
//如果是今天,设置字体和颜色
g.setFont(font2);
g.setColor(Color.BLUE);
}
else{
g.setFont(font1);
g.setColor(Color.BLACK);
}
String s = padLeft(Integer.toString(j), 2);
g.drawString(s, x, y);
//星期六结束到星期日时换行,X轴回到初始位置,Y轴增加
if ((day1st + j) % 7 == 0){
x = startX;
y = y + posLen - 5;
}
else
x = x + posLen;
}
}
public String padRight(String s, int n) {
return String.format("%1$-" + n + "s", s);
}
public String padLeft(String s, int n) {
return String.format("%1$" + n + "s", s);
}
// 计算星期几: 星期日至星期六的值为0-6
public int getWeeksOfDate(int year, int month, int day)
{
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
return calendar.get(Calendar.DAY_OF_WEEK)-1;
}
}
}
结果如下:
