JLabel を表示せずに、JLabel ラベルと同じテキスト画像を生成したいと考えています。
同じフォント、同じ描画方法を試しました。
ただし、生成されるイメージは JLabel と同じではありません。
私のソースコードは以下です。
* 'super.paintComponent(g)' は、同じ方法であることを明確にするためにコメント アウトされています。出力イメージは同じです。
※以下View.paintメソッドによる描画ですが、SwingUtilities2.drawStringも試してみました。2 つの結果は同じです。
/* Label */
JLabel label = new JLabel(text) {
@Override
public void paintComponent(Graphics g) {
//super.paintComponent(g);
View v = BasicHTML.createHTMLView(this, getText());
v.paint(g, new Rectangle(0, 0, getWidth(), getFontMetrics(
getFont()).getAscent()));
}
};
label.setFont(new Font("Consolas", Font.PLAIN, 13));
/* Image */
FontMetrics fm = label.getFontMetrics(font);
BufferedImage image = new BufferedImage(fm.stringWidth(text),
fm.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.setFont(label.getFont());
// Clear background.
g2d.setPaint(label.getBackground());
g2d.fillRect(0, 0, image.getWidth(), image.getHeight());
// Draw string.
g2d.setClip(new Rectangle(0, 0, image.getWidth(), image.getHeight()));
View v = BasicHTML.createHTMLView(label, text);
v.paint(g2d, new Rectangle(0, 0, image.getWidth(),
g2d.getFontMetrics().getAscent()));
// ... output image to file ...
結果の画像は次のとおりです。
[JLabel]
[生成画像]
生成画像はJLabelのキャプチャに比べてやや薄めです。
JLabel ラベルと同じテキスト画像を生成するにはどうすればよいですか?
ご検討をお願いいたします。