右对齐图像上的文本

时间:2013-01-16 12:20:48

标签: java graphics 2d awt fontmetrics

   Graphics g = image.getGraphics(); 
     FontMetrics fm = g.getFontMetrics();
      int actual_width= fm.stringWidth("My Value");
     drawString("My Value",total_width-actual_width,ypos);
    g.dispose();
    ImageIO.write(image, "bmp", new File(c:\\output.bmp));

如何使正确对齐

实际输出

enter image description here

所需输出

enter image description here

输出: -

System.out.println("total_width=" + image.getWidth() + " actual_width=" + actual_width);

    total_width=352 actual_width=46
    total_width=352 actual_width=38
    total_width=352 actual_width=68
    total_width=352 actual_width=73
    total_width=352 actual_width=36

1 个答案:

答案 0 :(得分:4)

这是一个小SSCCE,它可以解决您的问题:

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class Test extends JFrame{

    public static void main(String [] args){
        new Test();
    }

    private Test(){
        final BufferedImage img = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
        Graphics g = img.createGraphics();
        g.setColor(Color.BLACK);

        int total_width = img.getWidth();
        int y = 30;
        int padding = 100;

        String [] words = new String[]{"Example", "Of", "Right", "Alignment"};
        for(int i = 0; i < words.length; i++){
            int actual_width = g.getFontMetrics().stringWidth(words[i]);
            int x = total_width - actual_width - padding;
            g.drawString(words[i], x, y += 30);
        }
        g.dispose();


        setContentPane(new JPanel(){
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                g.drawImage(img, 0, 0, null);
            }
        });

        setSize(300,300);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
}