【问题标题】:Right align text on image右对齐图像上的文本
【发布时间】:2012-12-30 18:26:28
【问题描述】:
   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));

如何使这个右对齐

实际输出

所需输出

输出:-

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

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java graphics 2d awt fontmetrics


【解决方案1】:

这是一个小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);
    }
}

【讨论】:

  • 如果image.getWidth()-(2*padding)==stringWidth,它将居中。为了更好......好吧,见上文。
  • 右对齐不是组件的宽度减去文本的宽度吗?这是小学数学。
  • 那些图片没有意义,除非你的宽度值是错误的。
  • System.out.println() 绘制时的每个宽度进行调试。
  • @paranoid-android 如果屏幕截图中的代码在您的答案中显示为(代码格式的)文本,那将会很方便。
猜你喜欢
  • 2013-05-05
  • 2017-04-03
  • 1970-01-01
  • 2012-02-24
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2016-10-29
相关资源
最近更新 更多