文本绘制示例

package my;
import javax.swing.*;
public class Swing2 {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createGUI();
}
});
}
private static void createGUI() {
JFrame frame = new MyFrame("Swing Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 300);
frame.setVisible(true);
}
}
package my;
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame {
public MyFrame(String title) {
super(title);
JPanel root = new MyPanel();
this.setContentPane(root);
root.setLayout(new BorderLayout());
}
}
package my;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
public class MyPanel extends JPanel {
public MyPanel()
{
}
@Override
protected void paintComponent(Graphics g)
{
int width = getWidth();
int height = getHeight();
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(Color.BLUE);
g2d.setFont(new Font("宋体", Font.PLAIN, 30));
g2d.drawString("good boy !", 100, 100);
}
}
文字的坐标

设置字体
package Swing2_02;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.MultipleGradientPaint.CycleMethod;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.font.TextAttribute;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class MyPanel_swing_02 extends JPanel {
public MyPanel_swing_02() {
}
@Override
protected void paintComponent(Graphics g) {
int width = getWidth();
int height = getHeight();
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(Color.BLUE);
Font font = new Font("宋体", Font.BOLD | Font.ITALIC, 60);
g2d.setFont(font);
g2d.drawString("中国万岁", 100, 100);
}
}
文本的定位1

package Swing2_02;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.MultipleGradientPaint.CycleMethod;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class MyPanel_swing_02 extends JPanel
{
public MyPanel_swing_02()
{
}
@Override
protected void paintComponent(Graphics g)
{
int width = getWidth();
int height = getHeight();
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
String str = "good boy!";
g2d.setPaint(Color.BLUE);
g2d.setFont(new Font("宋体", Font.PLAIN, 30));
g2d.drawString(str, 100,100);
g2d.setPaint( Color.RED);
g2d.drawLine(0, 100, width, 100);
g2d.drawLine(100, 0, 100, height);
FontMetrics fm = g.getFontMetrics(g2d.getFont());
int textWidth = fm.stringWidth(str);
int fontSize = fm.getHeight();
int leading = fm.getLeading();
int ascent = fm.getAscent();
int descent = fm.getDescent();
System.out.printf("文本宽度: %d, 字体高度: %d :(%d,%d,%d) \n",
textWidth, fontSize, leading, ascent, descent);
}
}
文本的定位2

package Swing2_02;
import xyz.swing0202.MyFrame;
import javax.swing.*;
public class demo {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createGUI();
}
});
}
private static void createGUI() {
JFrame frame = new MyFrame_swing02_02("demo");
frame.setDefaultCloseOperation(MyFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setVisible(true);
}
}
绘制日历

package Swing2_02;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.MultipleGradientPaint.CycleMethod;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.Calendar;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class MyPanel_swing_02 extends JPanel
{
public MyPanel_swing_02()
{
}
@Override
protected void paintComponent(Graphics g)
{
int width = getWidth();
int height = getHeight();
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(Color.WHITE);
g2d.fillRect(0, 0, width, height);
int x = 0,y = 0;
int x_size = 40;
int y_size = 40;
g2d.setPaint( Color.GRAY);
g2d.drawLine(x,y, x + x_size*7, y );
g2d.drawLine(x,y+y_size, x + x_size*7, y + y_size);
String[] cc = {"一", "二", "三", "四", "五", "六", "日" };
g2d.setPaint( Color.GRAY);
g2d.setFont(new Font("宋体", 0,20));
for(int i=0; i<7; i++)
{
Rectangle rect = new Rectangle(x+ i*x_size , y, x_size, y_size);
drawText(g2d, cc[i], rect);
}
Calendar cal = Calendar.getInstance();
int theMonth = cal.get(Calendar.MONTH);
int theDay = cal.get(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, 1);
int weekday = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("week:" + weekday);
int start = weekday - Calendar.MONDAY;
if(start <0) start = 6;
cal.add(Calendar.DAY_OF_MONTH, 0 - start);
x = 0;
y += y_size;
for(int i=0; i<5; i++)
{
for(int j=0; j<7; j++)
{
if(cal.get(Calendar.MONTH) == theMonth)
{
g2d.setPaint(Color.BLACK);
}
else
{
g2d.setPaint(Color.GRAY);
}
int day = cal.get(Calendar.DAY_OF_MONTH);
Rectangle rect = new Rectangle(x+x_size*j, y+y_size*i, x_size, y_size);
drawText(g2d, String.valueOf(day), rect);
cal.add(Calendar.DAY_OF_MONTH, 1);
}
}
}
private void drawText(Graphics2D g2d, String str, Rectangle rect)
{
FontMetrics fm = g2d.getFontMetrics(g2d.getFont());
int fontSize = fm.getHeight();
int textWidth = fm.stringWidth(str);
int leading = fm.getLeading();
int ascent = fm.getAscent();
int descent = fm.getDescent();
int x = 0, y = 0;
x = rect.x + (rect.width - textWidth)/2;
y = rect.y + rect.height /2 + (fontSize-leading)/2 - descent;
g2d.drawString(str, x, y);
}
}