Самый простой способ - использовать JLabel с иконкой и текстом.Затем установите горизонтальное / вертикальное положение текста на CENTER, и текст будет нарисован в центре изображения.
Из вашего кода выглядит, как будто вы пытаетесь нарисовать текст в нижней части изображения.В этом случае вы можете использовать JLabel с Icon в качестве контейнера.Затем вы можете установить в макете что-то вроде 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();
}
});
}
}
Я имею в видучтобы написать текст в центре изображения, а затем сохранить изображение
Вы можете использовать Изображение экрана для создания изображения любого компонента.Это предполагает, что вы отображаете изображение и текст в графическом интерфейсе.
Или, если вы говорите о том, что вы просто читаете изображение, добавляете текст в изображение, а затем сохраняете изображение, то вам нужно будет создать BufferedImageи нарисуйте изображение на нем, а затем нарисуйте текст на нем.Вам нужно будет использовать класс FontMetrics, как упомянуто Trashgod.Мое предложение не поможет.