我有一个文本字符串,有关字体和行宽的信息,以像素为单位。是否有可能计算出该字符串需要多少行。
If a word is long, it will be writen in a next row, for example:
some test string |
very_very_long_word |
and even if there will be many white space
so very_very_long_word <= this can't be on one row
so |
very_very_long_word |
and if the word is too long, it will be separated at the end of row:
veryveryverylonglong|
word |
答案 0 :(得分:0)
你可以使用不同的类
with graphics2D
FontRenderContext frc = (( Graphics2D )g).getFontRenderContext();
String s = range.displayName;
float textWidth = (float) font.getStringBounds(s, frc).getWidth();
float textHeight = (float) font.getStringBounds(s, frc).getHeight();
或只使用FontMetrics
FontMetrics fm = c.getFontMetrics(font);
int fontHeight = fm.getHeight();
int w = fm.stringWidth("yourstring");
答案 1 :(得分:0)
没有办法做某事,所以我自己做了:
public class LineCalculator {
private static final FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true);
private static Font font;
private static int lines;
public int calcLines(String str, int width, String fontFamily, int scale)
{
font = new Font(fontFamily, Font.PLAIN, scale);
String[] source = str.split(" ");
String line = "";
lines = 1;
for (int i = 0; i < source.length - 1; i++) {
source[i] += " ";
}
for (String word : source) {
if (font.getStringBounds(line + word, frc).getWidth() > width) {
lines++;
line = singleWordCheck(word, width);
}
line += word;
}
return lines;
}
private String singleWordCheck(String str, int width)
{
CharSequence chars = str;
for (int i = 1; i < chars.length(); i++) {
if (font.getStringBounds(chars.subSequence(0, i).toString(), frc).getWidth() > width) {
lines++;
return singleWordCheck(chars.subSequence(i, chars.length() - 1).toString(), width);
}
}
return str;
}
}