java Graphics2D 生成图片随着字符长度变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Graphics2D 生成图片随着字符长度变化相关的知识,希望对你有一定的参考价值。

恩,如题。
BufferedImage image=new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);
Graphics2D g=(Graphics2D)image.getGraphics();//获取画布
//画字符串
g.setColor(fontColor);//设置字体样式
Font font=new Font(fontStyle,Font.PLAIN,fontSize);
g.setFont(font);
g.drawString("123456",20,20);
这个长度是不可变的。。。有没有好的办法呢?

参考技术A public void paintComponent(Graphics g)没有实例化!只是一个局部引用变量g,他的类型是 Graphics (父类的)
Graphics2D g2=(Graphics2d)g;应该是Graphics2D g2=(Graphics2D)g;
不要小看大小写!
这句话是这样执行的!
Graphics2D g2;创建Graphics2D 的引用!
能不能转换
1、检查 转换之间是否具有继承关系!
由于Graphics Graphics2D 具有继承关系,这一步通过!

2、Graphics2D 和(Graphics2D )是不是一样的类型!
肯定再次通过!
到这里就可以编译通过

3、检查 Graphics g 是否被实例化(这里是抽象类当然不能)
假如这里不是抽象的,如果父类被父类的构造器实例化,那么
运行出现异常!如果是被子类的构造器实例化的,那么执行也正确!
4、并不是你说的“继承中向下转型应该不能转吧”
关键是看它指向的是什么!

可以理解子类拥有的永远要大于或等于父类的,这样说明白不?
不懂再问!

建议你看《Java编程思想》也就是《Think in java》搜索下,PDF、CHM格式的很多!

补充:

理解一下引用类型!就像C 语言中的结构体一样!
VLabel a=(VLabel)new JLabel();//已经分配了空间!
可以分解成这样!
j=new JLabel();//
VLabel a=(VLabel)j;
实质上可以理解 j a 就是2个指针,(结构体指针)指针也有类型,比如int ……
你现在是去放大 指针j指向的内存单元~~我们怎么去分配新增加的内存单元?我们拿什么去添充新增加的内存单元?
Graphics2D g2=(Graphics2D)g
而这样只是在放大结构体!就像在结构体里面加一条
char c;一样的~

抱歉、我也不知道这样理解对不~~~反正这个东西搞昏了我好多次了~!
多看书、多找资料!本回答被提问者采纳

linux系统Java程序生成图片中文乱码

1.先查看系统字体

locale -a |grep zh

2.修改系统字符集

临时修改(当前终端生效):
export LANG="zh_CN.UTF-8"

永久修改:
export LANG="zh_CN.UTF-8"加入系统文件
/etc/proflile 最后位置

使其生效
source /etc/profile

windows系统可以在C:\\Windows\\Fonts找到对应的字体

链接:https://pan.baidu.com/s/19I-T1tjjwpo0JHxNmDG7tA
提取码:1234

把下载的字体上传到/usr/share/fonts文件夹中

我下载的是simsun字体,

把simsun.ttc和simsunb.ttf上传到/usr/share/fonts文件夹中

 

把字体上传到jdk安装目录的jdk8/jre/lib/fonts/的fallback目录下

如果没有fallback文件夹,可以创建。

注意:没有这一步有些字可能显示不全

重启Java程序

以上是关于java Graphics2D 生成图片随着字符长度变化的主要内容,如果未能解决你的问题,请参考以下文章

Graphics2D的问题高分悬赏

java 在已有的图片上画图

java根据图片和文字生成自定义图片

java使用Graphics2D图片叠加

JavaSE基础 awt Graphics2D 生成矩形图片并向其中画一条直线

JAVA根据URL生成二维码图片