查看字体的位置

来源:互联网 发布:北京公共图书馆网络 编辑:程序博客网 时间:2024/05/29 15:15
import java.awt.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;
public class FrontTest {


public static void main(String[] args) {
// TODO Auto-generated method stub


EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame=new FontFrame();
frame.setTitle("FontTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}


}




class FontFrame extends JFrame
{
public FontFrame()
{
add(new FontComponent());
pack();
}
}




class FontComponent extends JComponent
{
private static final int DEFAULT_WIDTH=300;
private static final int DEFAULT_HEIGHT=200;

public void paintComponent(Graphics g)
{
Graphics2D g2=(Graphics2D) g;
String message="Hello World!";
Font f=new Font("Serif",Font.BOLD,36);
g2.setFont(f);

FontRenderContext context=g2.getFontRenderContext();
Rectangle2D bounds=f.getStringBounds(message, context);

double x=(getWidth()-bounds.getWidth())/2;
double y=(getHeight()-bounds.getHeight())/2;

double ascent=-bounds.getY();
double baseY=y+ascent;

g2.drawString(message, (int)x, (int)baseY);//注意这里的基地线

g2.setPaint(Color.LIGHT_GRAY);

g2.draw(new Line2D.Double(x, baseY,x+bounds.getWidth(),baseY));

Rectangle2D rect=new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight());
g2.draw(rect);
}

public Dimension getPreferredSize()
{
return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
}
}
0 0