【发布时间】:2014-11-17 12:27:04
【问题描述】:
我有一个扩展 BufferedImage 的类,它应该显示为提供给它的构造函数的字符串。我希望这样做的原因是允许graphics2D 的抗锯齿功能(有关更多详细信息,请参阅我的previous question,如果您有任何更好的建议,请务必提出建议!)。我现在可以使用BufferedImage 类,但是我无法弄清楚如何确定所需的宽度和高度,以便在实际设置字体之前显示输入字符串。一旦设置了初始大小,我也找不到调整 BufferedImage 父级大小的方法。这是我的代码:
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class Test extends JFrame{
public Test(){
this.add(new JLabel(new ImageIcon(new IconImage("Test", new Font("Sans-Serif", Font.PLAIN, 16)))));
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.pack();
}
class IconImage extends BufferedImage{
public IconImage(String text, Font font){
super(..., ..., BufferedImage.TYPE_INT_ARGB);//*****Unknown dimensions*****
Graphics2D g2d = (Graphics2D) this.getGraphics();
g2d.setFont(font);
g2d.setColor(Color.BLACK);
int stringHeight = (int) g2d.getFontMetrics().getStringBounds(text, g2d).getHeight();
g2d.drawString(text, 0 , stringHeight);
g2d.dispose();
}
}
public static void main(String[] args){
new Test();
}
}
有什么建议吗?谢谢。
【问题讨论】:
-
请问您为什么尝试先创建图像然后创建按钮?你有可能反过来做吗? (如果是:您可以测量按钮,然后创建该图像)顺便说一句:如何显示比您的组件更大的图形 - 它可以工作但被剪裁......
-
因为实际实现只是创建一个按钮,然后调用
setIcon和setRolloverIcon。我无法弄清楚如何仅对调用了setText的按钮执行抗锯齿。
标签: java swing fonts font-size bufferedimage