• JAVA:图形之利用FontMetrics类居中


     1 //利用FontMetrics类居中
     2 import javax.swing.*;
     3 import java.awt.*;
     4 public class TestCenterMessage extends JFrame{
     5    public TestCenterMessage(){
     6        CenterMessage messagePanel = new CenterMessage();
     7        add(messagePanel);
     8        messagePanel.setBackground(Color.WHITE);
     9        messagePanel.setFont(new Font("Californian FB",Font.BOLD,30));
    10     }
    11     public static void main(String[] agrs){
    12         JFrame frame = new TestCenterMessage();
    13         frame.setBounds(200,300,300,150);
    14         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    15         frame.setVisible(true);
    16     }
    17 }
    18 
    19 class CenterMessage extends JPanel{
    20    protected void paintComponent(Graphics g){
    21        super.paintComponent(g);
    22        
    23        //得到当前的font metrics
    24        FontMetrics fm = g.getFontMetrics();
    25        
    26        int stringWidth = fm.stringWidth("Welcome to Java");
    27        int stringAscent = fm.getAscent();
    28        
    29        int xCoordinate = getWidth()/2 - stringWidth/2;
    30        int yCoordinate = getHeight()/2 +stringAscent/2;
    31        
    32        g.drawString("Welcome to Java",xCoordinate,yCoordinate);
    33     }
    34 }

     对比:

    仔细观察,字符串稍微偏高

     1 import javax.swing.*;
     2 import java.awt.*;
     3 public class TestCenterMessage extends JFrame{
     4    public TestCenterMessage(){
     5        CenterMessage messagePanel = new CenterMessage();
     6        add(messagePanel);
     7        messagePanel.setBackground(Color.WHITE);
     8        messagePanel.setFont(new Font("Californian FB",Font.BOLD,30));
     9     }
    10     public static void main(String[] agrs){
    11         JFrame frame = new TestCenterMessage();
    12         frame.setBounds(200,300,300,150);
    13         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    14         frame.setVisible(true);
    15     }
    16 }
    17 
    18 class CenterMessage extends JPanel{
    19    protected void paintComponent(Graphics g){
    20        super.paintComponent(g);
    21        
    22        //得到当前的font metrics
    23        FontMetrics fm = g.getFontMetrics();
    24        
    25        int stringWidth = fm.stringWidth("Welcome to Java");
    26        int stringAscent = fm.getAscent();
    27        
    28        int xCoordinate = getWidth()/2 - stringWidth/2;
    29        //int yCoordinate = getHeight()/2 +stringAscent/2;
    30        int yCoordinate = getHeight()/2;
    31 
    32        g.drawString("Welcome to Java",xCoordinate,yCoordinate);
    33     }
    34 }
  • 相关阅读:
    对称加密算法在C#中的踩坑日常
    php与Git下基于webhook的自动化部署
    1024程序员节阿里谜题解析
    一次ajax请求导致status为canceled的原因小记
    LigerUI下拉选择列表LigerComboBox中tree的节点初始化默认选中的问题
    linux环境下安装PHP扩展swoole
    Memcache PHP 使用笔记
    VS生成事件执行XCOPY时出现Invalid num of parameters的解决方案
    mysql表的完整性约束
    mysql支持的数据类型
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2527208.html
Copyright © 2020-2023  润新知