13,100
社区成员
发帖
与我相关
我的任务
分享
/**
* 将某个字符串切割成适合显示长度的数组
* @param font 显示字体
* @param strSrc 待切割的文字
* @param width 每行的最大宽度
* @return 处理后的结果字符串数组
*/
public static String[] Str_Split(Font font, String strSrc, int width) {
int totalWidth = font.stringWidth(strSrc);
int totalLines = totalWidth / width;
if (totalWidth % width != 0) {
totalLines++;
}
String lines[] = new String[totalLines];
int lineIndex = 0;
int startIndex = 0;
int length = strSrc.length();
int lineWidth = 0;
int charWidth = 0;
for (int i = 0; i < length; i++) {
charWidth = font.charWidth(strSrc.charAt(i));
if (lineWidth + charWidth > width || i == length - 1) {
lines[lineIndex++] = strSrc.substring(startIndex, i);
startIndex = i;
lineWidth = 0;
}
lineWidth += charWidth;
}
return lines;
}
g.setFont(Font.getDefaultFont());
int x = ?;
int y = ?;
String[] lines = funname???("你要按宽度拆分的长字符串", 50);
for (int i = 0; i < lines.length; i++) {
g.drawString(lines[i], x, y, Graphics.TOP | Graphics.LEFT);
y += Font.getDefaultFont().getHeight();
}
/**
* 可换行绘制文本
*
* @param g
* Graphics
* @param str
* 文本内容
* @param x
* 左边距X
* @param y
* Y
* @param rightMargin
* 右边距
* @param font
* 字体
*
* @return row 行数
*/
public static int drawWrapString(Graphics g, String str, int x, int y,
int rightMargin, Font font) {
int row = 0;// 记录行数
int leftMargin = x;// 左边距
int fW = 0;// 单个字符的宽
int fH = font.getHeight();// 文字的高度
char c;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
fW = font.charWidth(c);
if (c == '\n' || (x + fW) > rightMargin) {
x = leftMargin; // 改变x坐标
y += fH + 2; // 换行
row++;
}
g.drawChar(c, x, y, 20);
x += fW; // 使X坐标变大
}
return row;
}