1つに2つの質問がありますが、問題を示す非常に短いテストケースがあります。
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.imageio.*;
public class Numbers {
public static void main(String[] args) throws IOException {
double[] numbers = { 10000.12, 20000.23, 3000.45 };
DecimalFormat format = new DecimalFormat("0.00");
format.setGroupingUsed(false);
BufferedImage image = new BufferedImage(400, 150, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.BLACK);
g2d.setBackground(Color.YELLOW);
g2d.clearRect(0, 0, image.getWidth(), image.getHeight());
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setFont(new Font(Font.SANS_SERIF,Font.BOLD, 24));
FontMetrics metrics = g2d.getFontMetrics();
for (int i = 0; i < numbers.length; i++) {
String str = format.format(numbers[i]);
System.out.println(i + ": " + str);
int w = metrics.stringWidth(str);
int h = metrics.getHeight();
int x = 100 * i;
g2d.drawString(str, x - w/2, 0);
}
g2d.dispose();
ImageIO.write(image, "PNG", new File("Numbers.png"));
}
}
私がそれを使うとき、私は得ます:
C:\Temp>javac -version
javac 1.6.0_24
C:\Temp>javac Numbers.java
C:\Temp>java Numbers
0: 10000,12
1: 20000,23
2: 3000,45
そして、この画像は次のように生成されます。
私の質問:
- ロケールを切り替えずに、DecimalFormatにコンマではなくドットを使用させるにはどうすればよいですか?
- wは正しいようですが、高さが0の何が問題になっていますか?数字が画面外に印刷されるのはなぜですか?
ありがとうございました!アレックス
アップデート:
ロケールを使用することになりました。str.replace( "。"、 "、")コメントもかっこいいです。
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.imageio.*;
public class Numbers {
public static void main(String[] args) throws IOException {
double[] numbers = { 10000.12, 20000.23, 3000.45 };
BufferedImage image = new BufferedImage(400, 150, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.WHITE);
g2d.setBackground(Color.GRAY);
g2d.clearRect(0, 0, image.getWidth(), image.getHeight());
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setFont(new Font(Font.SANS_SERIF,Font.BOLD, 24));
FontMetrics metrics = g2d.getFontMetrics();
NumberFormat format = NumberFormat.getInstance(Locale.US);
format.setGroupingUsed(false);
if (format instanceof DecimalFormat) {
((DecimalFormat) format).applyPattern("0.00");
}
for (int i = 0; i < numbers.length; i++) {
String str = format.format(numbers[i]);
System.out.println(i + ": " + str);
int w = metrics.stringWidth(str);
int h = metrics.getHeight();
int x = 100 * i;
g2d.drawString(str, x - w/2, h);
}
g2d.dispose();
ImageIO.write(image, "PNG", new File("Numbers.png"));
}
}