java 字体宽度_Java中字体高度和宽度的关系分析

package com.epgis.demo;

import java.awt.Color;

import java.awt.Font;

import java.awt.FontMetrics;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.Toolkit;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;

import javax.swing.JPanel;public classMyTest extends JPanel {/** **/

private static final long serialVersionUID = -160117449327146673L;public voidpaintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2=(Graphics2D) g;

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

Font ft= new Font("SansSerif", 0, 200);

g2.setFont(ft);//获得字体宽度方法一

FontMetrics fm =g2.getFontMetrics();

Rectangle2D rc= fm.getStringBounds("By", g2);

System.out.println("Width:" +rc.getWidth());

Rectangle2D rcb= fm.getStringBounds("B", g2);

System.out.println("Width:" +rcb.getWidth());

Rectangle2D rcy= fm.getStringBounds("y", g2);

System.out.println("Width:" +rcy.getWidth());//获得字体宽度方法二

FontMetrics fm2 = Toolkit.getDefaultToolkit().getFontMetrics(ft);//已过时

System.out.println("Width:" + fm2.stringWidth("By"));///

int baseline = 300;

g2.drawString("By", 200, baseline);

g2.setColor(Color.red);

g2.setFont(new Font("SansSerif", 0, 15));绘制宽度

g2.drawLine(200, 0, 200, 800);

g2.drawLine(200+(int) rcb.getWidth(), 0, 200+(int) rcb.getWidth(), 800);

g2.drawLine(200 + (int) rc.getWidth(), 0, 200 + (int) rc.getWidth(),800);

g2.drawString("Width", 200 + (int) rcb.getWidth() / 2-10, baseline + 58);

g2.drawString("Width", 200 + (int) rcb.getWidth()+(int)rcy.getWidth() / 2-10, baseline + 58);//可以看出Height = Ascent + Descent + Leading

int ascent =fm.getAscent();int descent =fm.getDescent();int leading =fm.getLeading();int height =fm.getHeight();

System.out.printf("Height = %d\tAscent = %d\tDescent = %d\tLeading = %d", height,

ascent, descent, leading);

System.out.println();//在文字上绘制每一个常量,用一条横线予以标注

g2.drawLine(100, baseline, 500, baseline);

g2.drawLine(100, baseline - ascent, 500, baseline -ascent);

g2.drawLine(100, baseline + descent, 500, baseline +descent);

g2.drawLine(100, baseline - ascent - leading, 500, baseline -ascent-leading);//指出基线的位置,和其他常量作用的范围。

g2.drawString("Baseline", 510, baseline);

g2.drawLine(480, baseline - ascent, 480, baseline);//绘出Ascent的范围

g2.drawString("Ascent", 510, baseline - ascent / 2);

g2.drawLine(480, baseline, 480, baseline +descent);//绘出Descent的范围

g2.drawString("Descent", 510, baseline + descent / 2);//绘出Leading的范围

g2.drawLine(480, baseline - ascent, 480, baseline - ascent -leading);

g2.drawString("Leading", 510, baseline - ascent - leading / 2);//绘出Height的范围

g2.drawLine(100, baseline - ascent - leading, 100, baseline +descent);

g2.drawString("Height", 30, baseline - ascent - leading + height / 2);

}public static voidmain(String[] args) {

JFrame frame= newJFrame();

frame.setTitle("Show Font's Metrics Info");

frame.addWindowListener(newWindowAdapter() {public voidwindowClosing(WindowEvent e) {

System.exit(0);

}

});

frame.setContentPane(newMyTest());

frame.setSize(800, 500);

frame.setVisible(true);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Java和Python的爬虫项目实战源码.zip 自己动手写网络爬虫》,并基于Python3和Java实现 为什么采用宽度优先搜索策略? 深度优先遍历可能会在深度上过“深”而陷入“黑洞”; 重要的网页往往距离种子网页比较近,越深的网页的重要性越低; 万维网深度最多17层,但到达某面总存在一条很短的路径,宽度优先遍历会以最快的速度达到这个网页; 宽度优先遍历有利于多爬虫的合作抓取,多爬虫合作通常先抓取站内链接,抓取的封闭性很强; 解析HTML网页---Jsoup Maven配置: <dependency> <groupId>org.jsoup</gorup> <artifactId>jsoup</artifactId> <version>1.10.3</version> </dependency> 正则表达式: 对URL进行过滤,只提取符合特定格式的链接; 提取网页内容; HTMLParser: 文本抽取; 链接抽取; 资源抽取; 链接检查; 站点检查; URL重写; 广告清除; 将HTML页面转化成XML页面; HTML页面清理; Rhino是一个由Java实现的JavaScript语言解析引擎,Rhino的主要功能是管理脚本执行时的运行环境 非HTML解析: PDF文件:PDFBox解析PDF文件 FontBox:处理PDF字体Java类库 JempBox处理XMP元数据 的Java类库 Office文档:POI项目 POI读写Excel、Word、PPT文件 POI-HSMF读写Outlook POI-HDGF读写Visio POI-HPBF支持Publisher 其他文件 多媒体内容抽取: 抽取视频内容 视频内容一般分为四部分:帧、镜头、情节和节目 关键帧的提取---动态规则策略、基于视觉模型的自适应关键帧提取策略、基于镜头边界系数的关键帧提取策略 基于镜头边界系数的关键帧提取分3个步骤进行: 设置最大关键帧数M 每个镜头的非边界过渡区的第一帧确定为关键帧 【找镜头边界:基于帧差的镜头边界检测方法、基于模型的镜头边界检测方法、基于学习的镜头边界检测方法】 使用非极大值抑制法确定镜头边界系数极大值并排序,以实现基于镜头边界系数的关键帧提取 JMF(Java视频处理): 功能 a)在Java Applet和应用程序播放贵重物品媒体文件,如AVI、MPEG、WAV等; b)可以播放从互联网上下载的媒体流; c)可以利用麦克风、摄像机等设备截取音频和视频,并只在成多媒体文件; d)处理多媒体文件,转换成文件格式; e)向互联网上传音频和视频数据流; f)在互联网上播放音频和视频数据; 组件 a)数据源,如一个媒体文件 b)截取设备,如麦克风、摄像机等 c)播放器-Player,JMF的接口是Player,将音频/视频数据流作为输入,将数据流输出到音箱或屏幕上 d)处理器-Processor,Processor接口继承了Player接口,支持Player对象所支持的功能外还可以控制对于输入的多媒体数据流进行何种处理以及通过数据源向其他Player对象或Processor对象输出数据 e)数据格式-Format,保存多媒体格式信息 f)管理器,4种管理器Manager、PackageManager、CaptureDeviceManager、PlugInManager Sourceforge-org.farng.mp3(Java音频处理): 音乐:歌手名+歌曲名等元信息,以MP3文件大体分为三部分: a) TAG_V2(ID3V2) 包含了作者、作曲、专辑等信息,长度不固定,扩充ID3V1信息 b) Frame 一系列的帧,由帧头(MP3的位率、采样率、版本等信息)和数据实体两部分组成 c) TAG_V1(ID3V1) 包含作者、作曲、专辑等信息,长度128字节 解析Json数据---Json Maven配置: <dependency> <groupId>com.alibabap</gorup> <artifactId>fastjson</artifactId> <version>1.2.35.3</version> </dependency> 评估页面的重要程度 链接的欢迎程度---反向链接(即指向当前URL的链接)的数量和质量决定的,定义为IB(P); 链接的重要程度---关于URL字符串的函数,仅仅考察字符串本身,比如认为".com"和"home"的URL比".cc"和"map"高,定义为IL(P); 平均链接的深度---根据上面所分析宽度优先的原则,计算全站的平均链接深度,然后认为距离种子站点越近的重要性越高

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值