简单的方法是使用带有图标和文本的JLabel。然后将水平/垂直文本位置设置为CENTER,并将文本绘制在图像的中心。
从您的代码看起来好像您正在尝试在图像底部附近绘制文本。在这种情况下,您可以使用带有Icon的JLabel作为容器。然后,您可以将布局设置为BoxLayout之类的内容,并在文本中添加另一个标签。
两种方法都不需要自定义绘画。
import java.awt.*;
import javax.swing.*;
public class LabelImageText extends JPanel
{
public LabelImageText()
{
JLabel label1 = new JLabel(new ColorIcon(Color.ORANGE, 100, 100));
label1.setText("Easy Way");
label1.setHorizontalTextPosition(JLabel.CENTER);
label1.setVerticalTextPosition(JLabel.CENTER);
add(label1);
JLabel label2 = new JLabel(new ColorIcon(Color.YELLOW, 200, 150));
label2.setLayout(new BoxLayout(label2, BoxLayout.Y_AXIS));
add(label2);
JLabel text = new JLabel("More Control");
text.setAlignmentX(JLabel.CENTER_ALIGNMENT);
label2.add(Box.createVerticalGlue());
label2.add(text);
label2.add(Box.createVerticalStrut(10));
}
public static class ColorIcon implements Icon
{
private Color color;
private int width;
private int height;
public ColorIcon(Color color, int width, int height)
{
this.color = color;
this.width = width;
this.height = height;
}
public int getIconWidth()
{
return width;
}
public int getIconHeight()
{
return height;
}
public void paintIcon(Component c, Graphics g, int x, int y)
{
g.setColor(color);
g.fillRect(x, y, width, height);
}
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("LabelImageText");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new LabelImageText());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
我的意思是我必须写在图像的中心的文本,然后保存图像
您可以使用Screen Image创建任何成分的图像。这假定您正在GUI上显示图像和文本。或者,如果您只是在图像中添加文本并保存图像,那么您需要创建一个BufferedImage并在其上绘制图像,然后在其上绘制文本。您将需要使用Trashgod提到的FontMetrics类。我的建议无济于事。
很容易和正确+1 – mKorbel
+1让布局经理完成这项工作。 – trashgod
我会试试这种方式。谢谢。 – GhzNcl