JAVA Swing学习之窗体文本显示

JAVA中提供了一种类Font,专门用来定义字体,关于这个字体的定位需要注意几点:


1.利用Font类的getStringBounds方法来获得包围字符串的矩形;


2.如果要的得到屏幕设备对于字体属性的描述,需要调用Graphics的getFontRenderContext方法;


3.注意几个概念:上坡度,下坡度,行间距,基线,行高,这些大小会用来定义对一个字符串的描述,其中如果得到包围字符串矩阵的边界,对其进行getWidth(),则可得到上坡度+下坡度+行间距;


4.如果想得到下坡度和行间距,需要调用font的getLineMetrics方法,然后利用LineMetrics方法的getDescent获得下坡度,getLeading获得行间距。


5.关于setDefaultCloseOperation方法的说明,只有一个参数,是一个整形参数,0,1,2,3分别代表:


0=DO_NOTHING_ON_CLOSE
1=HIDE_ON_CLOSE(default value)
2=DISPOSE_ON_CLOSE
3=EXIT_ON_CLOSE


下面是今天写的代码:
package font;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;
 
public class FontTest
{
    public static void main(String[] args)
    {
        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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值