Java - 在图像中心绘制文本
我需要在图像的中心写入文本。要写的文本并不总是相同的。
我正在使用的代码在这里:
// Here I first draw the image
g.drawImage(img, 22, 15, 280, 225, null);
// I get the text
String text = photoText.getText();
// Set the text color to black
g.setColor(Color.black);
// I draw the string
g.drawString(text, 79.5F, 220.0F);
问题是文本不在图像的中心,我该怎么办?
我只需要在水平中心绘制文本。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
JLabel
工作量较少,但FontMetrics
,如图 此处,将让您直接管理几何图形。Using a
JLabel
is less work, butFontMetrics
, shown here, will let you manage the geometry directly.最简单的方法是使用带有图标和文本的 JLabel。然后将水平/垂直文本位置设置为 CENTER,文本将绘制在图像的中心。
从您的代码来看,您似乎正在尝试在图像底部附近绘制文本。在这种情况下,您可以使用带有 Icon 的 JLabel 作为容器。然后,您可以将布局设置为 BoxLayout 之类的内容,并添加另一个带有文本的标签。
这两种方法都不需要定制绘画。
您可以使用 屏幕图像创建任何组件的图像。这假设您正在 GUI 上显示图像和文本。
或者,如果您正在谈论只是读取图像,向图像添加文本,然后保存图像,那么您将需要创建一个 BufferedImage 并在其上绘制图像,然后在其上绘制文本。您将需要使用 Trashgod 提到的 FontMetrics 类。我的建议没有帮助。
The easy way is to use a JLabel with an Icon and Text. Then set the horizontal/vertical text position to CENTER and the text is painted in the center of the image.
From your code it looks like you are trying to paint the text near the bottom of the image. In this case you can use the JLabel with an Icon as a container. Then you can set the layout to something like a BoxLayout and add another label with the text.
No custom painting is required for either approach.
You can use Screen Image to create an image of any component. This assumes you are displaying the image and text on a GUI.
Or, if you are talking about just reading in an image adding text to the image and then saving the image, then you will need to create a BufferedImage and draw the image on it and then draw the text on it. You will need to use the FontMetrics class as mentioned by Trashgod. My suggestion won't help.
一种可能的解决方案:在 JPanel 中绘制图像,确保将面板的首选大小设置为图像的大小,让 JPanel 使用 GridBagLayout,并将文本放置在添加到 JPanel 的 JLabel 中,而不使用 GridBagConstraints。这是将 JLabel 置于 JPanel 中心的一种方法。
One possible solution: draw the image in a JPanel, being sure to set the panel's preferredsize as the size of the image, have the JPanel use a GridBagLayout, and place the text in a JLabel that is added to the JPanel, without GridBagConstraints. This is one way to center the JLabel in the JPanel.
我使用了
TextLayout
使文本正确居中:以下是创建图像并将其另存为文件的方法:
I used
TextLayout
to get the text properly centered:Here's how to create the image and save it as a file: