java awt根据字符串的信息和字体获取所占有的像素

最近在开发一个类似报表组件的时候碰到了这个问题。

在开发这个组件的时候刚开始是使用jfreechart这个开源的工具,在经过两天的尝试以后放弃了。主要原因是如果我要拓展组件的功能,jfreechart不是很好操作,最后就自己实现了这个东西,实际上也不是很麻烦。主要使用graphics2D进行图形的绘制的。

在开发组件的时候需要将每个数据的标题给绘制在报表的下面,但是不知道这个字体的信息,也不知道这个标题有多长,这个时候就要得到这个标题的所占有的像素数了,

如果需要换行的就要换行了,并且要动态控制每行的高度,不能因为字体信息的改变而随意变化。

下面给出代码:

/**
	 * 获取所有点信息中最长的文字
	 *
	 * @param g2d
	 * @param font
	 * @return
	 * @parm
	 * @exception
	 */
	public double getMaxFontWidth(Graphics2D g2d, Font font) {
		double maxWidth = 0;

		for (String key : pointsInfo.keySet())
		{
			double fontSize = getFontSize(g2d, font, key);
			if (maxWidth < fontSize)
			{
				maxWidth = fontSize;
			}
		}
		return maxWidth;
	}

	/**
	 * 获取对应字体的文字的高度
	 *
	 * @param g2d
	 * @param font
	 * @return
	 * @parm
	 * @exception
	 */
	public double getFontHeight(Graphics2D g2d, Font font) {
		// 设置大字体
		FontRenderContext context = g2d.getFontRenderContext();
		// 获取字体的像素范围对象
		Rectangle2D stringBounds = font.getStringBounds("w", context);
		double fontWidth = stringBounds.getWidth();
		return fontWidth;
	}

	/**
	 * 获取对应的文字所占有的长度
	 *
	 * @param g2d
	 * @param font
	 * @return
	 * @parm
	 * @exception
	 */
	public double getFontSize(Graphics2D g2d, Font font, String text) {
		// 设置大字体
		FontRenderContext context = g2d.getFontRenderContext();
		// 获取字体的像素范围对象
		Rectangle2D stringBounds = font.getStringBounds(text, context);
		double fontWidth = stringBounds.getWidth();
		return fontWidth;
	}

由于需要回去所有的标题中最长的信息,顺便将那段代码也贴出来了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 01:12:35

java awt根据字符串的信息和字体获取所占有的像素的相关文章

Java中的字符串常量池

最近做到一个题目: 问题:String str = new String("abc"),"abc"在内存中是怎么分配的?    答案是:堆,字符串常量区. 题目考查的为Java中的字符串常量池和JVM运行时数据区的相关概念."abc"为字面量对象,其存储在堆内存中.而字符串常量池则存储的是字符串对象的一个引用. Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid&qu

Java Swing 之查看图标信息

/** *查看图标的信息 *@author gao */ package com.gao; import java.awt.FlowLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class ImageInfoDemo

认识Java中的字符串

Java 中 String 类的常用方法 Ⅰ String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等,下面我们就来领略它的强大之处吧. String 类的常用方法: 结合代码来熟悉一下方法的使用: 功能:判断 Java 文件名是否正确,判断邮箱格式是否正确.其中:合法的文件名应该以 .java 结尾:合法的邮箱名中至少要包含 "@" , 并要求 "@" 在 "." 之前. p

Java awt项目开发

通过Java awt 界面上的知识编写的扫雷游戏 代码中有详细的注解 package com.langsin.saolei; import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Image;import java.awt.Insets;import java.awt.Label;imp

World Wind Java开发之三 显示状态栏信息

先来看下本篇博客索要达到的效果: 找到源码下的gov.nasa.worldwind.util下的StatusBar.java文件,可以看到状态栏显示的信息主要包括视点高度以及对应空间点三维坐标以及是否使用网络等信息.在后续的开发中采用离线模式,因此不需要联网,也不显示网络状态信息.代码依次如下面几幅图所示: 修改完源代码后,将源代码文件导出为jar包,在我们的工程下引用即可.后面如果需要修改源代码,都按这种方式操作:具体操作步骤如下: 需要说明的是导出的时候可以只勾选src文件夹也可以默认.导出

为什么Java中的字符串是不可变的?

原文链接:https://www.programcreek.com/2013/04/why-string-is-immutable-in-java/ java字符串是不可变的.不可变类只是一个不能修改实例的类.实例创建时所有的信息都被初始化,并且信息不能被修改.不可变类有许多优点.本文总结了字符串为什么被设计成不可变的原因.这说明在记忆的角度不变性的概念,同步和数据结构. 1.字符串池的要求: 字符串池(字符串特定池)是方法区域中的一个特殊存储区域.当创建字符串时,如果字符串已经存在于池中,则将

【技巧】Java工程中的Debug信息分级输出接口及部署模式

也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务器出现硬件故障,于是笔者连夜更换新服务器,然而在配置ssh的时候遇到了不明原因的连接失败.于是笔者百度了一番,发现了一些有趣的东西. 首先打开ssh的配置文件 sudo nano /etc/ssh/sshd_config 我们可以发现里面有这么几行 # Logging LogLevel DEBUG3

2.1号Java复习题目——Java中的字符串(基础知识整理)

Java中的字符串基础知识 作为程序开发当中,使用最频繁的类型之一,字符串有着与基础类型相同的地位,甚至在 JVM(Java 虚拟机)编译的时候会对字符串做特殊的处理,比如拼加操作可能会被 JVM 直接合成为一个最终的字符串,从而到达高效运行的目的. 1 String 特性 String 是标准的不可变类(immutable),对它的任何改动,其实就是创建了一个新对象,再把引用指向该对象: String 对象赋值之后就会在常量池中缓存,如果下次创建会判定常量池是否已经有缓存对象,如果有的话直接返

Java学习笔记--字符串和文件IO

1.Java中的字符串类和字符的表示 2.区分String,StringBuilder和StringBuffer 3.从命令行中给main方法传递参数 4.文件操作 1 Java中的字符串和字符 1.1 String类 字符串就是由一系列的字符组成的序列,在很多语言中,比如C语言,将其存储在一个数组中.现在运用Java的思想,就要将字符串视为一个对象,其中Java规定的String类有11个构造方法,同时还有至少40种实现的方法,通过String类的学习,可以很好地了解面向对象的类和对象的思想.