有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java右对齐图像上的文本

   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) 个答案

  1. # 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);
        }
    }