zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    npm 默认创建项目如何自动配置
    VueJS + TypeScript 入门第一课
    实现类数组转化成数组(DOM 操作获得的返回元素值是一个类数组)
    webpack4(4.41.2) 打包出现 TypeError this.getResolve is not a function
    vue-cli 4.0.5 配置环境变量样例
    关于H5页面在微信浏览器中音视频播放的问题
    ant-design-vue 快速避坑指南
    记elementUI一个大坑
    VUE自定义(有限)库存日历插件
    node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2527208.html
Copyright © 2011-2022 走看看