Java 右对齐图像上的文本
如何使其右对齐 实际产出 所需输出 输出:-Java 右对齐图像上的文本,java,graphics,2d,awt,fontmetrics,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
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
import javax.swing.*;
导入java.awt.*;
导入java.awt.image.*;
公共类测试扩展了JFrame{
公共静态void main(字符串[]args){
新测试();
}
私人测试(){
final BufferedImage img=新的BufferedImage(300300,BufferedImage.TYPE_INT_ARGB);
Graphics g=img.createGraphics();
g、 设置颜色(颜色为黑色);
int total_width=img.getWidth();
int y=30;
int=100;
String[]words=新字符串[]{“Example”、“Of”、“Right”、“Alignment”};
for(int i=0;i
为了更快地获得更好的帮助,请发布一个。如果image.getWidth()-(2*padding)=stringWidth,它将居中。为了更好。。好的,如上所述。右对齐将是组件的宽度减去文本的宽度,这难道没有意义吗?这是小学数学。除非你的宽度值是错误的,否则这些图像毫无意义。System.out.println()
绘制调试时的每个宽度。@paranoid android如果屏幕截图中看到的代码在你的答案中显示为(代码格式的)文本,那就很方便了。
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);
}
}