package my;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.font.TextAttribute;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JPanel;
public class MyPanel extends JPanel
{
public MyPanel()
{
}
@Override
protected void paintComponent(Graphics g)
{
int width=this.getWidth();
int height=this.getHeight();
Graphics2D g2d=(Graphics2D)g;
//平滑绘制
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(Color.BLUE);
//示例1:
Font font=new Font("宋体",0,30);
g2d.setFont(font); //字体高度
String str="你好,清风!";
// g2d.drawString(str, 100, 100);
//画一个参考矩形
Rectangle r=new Rectangle(40,40,400,100);
g2d.setPaint(Color.RED);
g2d.drawRect(r.x, r.y, r.width, r.height);
//文本的测量
FontMetrics fm=g.getFontMetrics(g2d.getFont()); //创建一个FontMetrics对象
int textWidth=fm.stringWidth(str);
int fontSize=fm.getHeight(); //字高=leading+ascent+descent
int leading=fm.getLeading();
int ascent=fm.getAscent();
int descent=fm.getDescent();//bottom->baseline的高度
//baseLine:基线位置
g2d.setPaint(Color.BLUE);
g2d.drawLine(0, fontSize-descent, width, fontSize-descent);
int x=0,y=0;
/*水平方向*/
//x=r.x; //水平靠左
x=r.x+(r.width-textWidth)/2 ; //水平居中
//x=r.x+r.width-textWidth;
/*竖直方向*/
//y=r.y+leading+ascent; //竖直靠上
y = r.y + r.height /2 + (fontSize-leading)/2 - descent; // 竖直居中
//y = rect.y + rect.height - descent; //竖直靠下
g2d.drawString(str, x, y);
}
}
package my;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyFrame extends JFrame
{
public MyFrame(String title)
{
super(title);
//ContentPane
JPanel root=new MyPanel();
this.setContentPane(root);
root.setLayout(new BorderLayout());
}
}
package my;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class MyDemo
{
private static void createGUI()
{
// JFrame指一个窗口,构造方法的参数为窗口标题
JFrame frame = new MyFrame("Swing Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口的其他参数,如窗口大小
frame.setSize(500, 300);
// 显示窗口
frame.setVisible(true);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run()
{
createGUI();
}
});
}
}