String longString = "a very very very very very very very very very very very long string"; StringBuilder builder = new StringBuilder("<html>"); char[] chars = longString.toCharArray(); FontMetrics fontMetrics = jLabel1.getFontMetrics(jLabel1.getFont()); for (int i = 0, j = 1;; j++) { if (fontMetrics.charsWidth(chars, i, j) < jLabel1.getWidth()) { if (i + j < chars.length) continue; builder.append(chars, i, j); break; } builder.append(chars, i, j - 1).append("<br/>"); i = j - 1; j = 1; } builder.append("</html>"); jLabel1.setText(builder.toString());
用<html>标记应该可以,楼上的方法试一下
少打了个加号,重发一次。 String longString = "a very very very very very very very very long string"; StringBuilder builder = new StringBuilder("<html>"); char[] chars = longString.toCharArray(); FontMetrics fontMetrics = jLabel1.getFontMetrics(jLabel1.getFont()); for (int beginIndex = 0, limit = 1;; limit++) { System.out.println(beginIndex + " " + limit + " " + (beginIndex + limit)); if (fontMetrics.charsWidth(chars, beginIndex, limit) < jLabel1.getWidth()) { if (beginIndex + limit < chars.length) { continue; } builder.append(chars, beginIndex, limit); break; } builder.append(chars, beginIndex, limit - 1).append("<br/>"); beginIndex += limit - 1; limit = 1; } builder.append("</html>"); jLabel1.setText(builder.toString());
StringBuilder builder = new StringBuilder("<html>");
char[] chars = longString.toCharArray();
FontMetrics fontMetrics = jLabel1.getFontMetrics(jLabel1.getFont());
for (int i = 0, j = 1;; j++) {
if (fontMetrics.charsWidth(chars, i, j) < jLabel1.getWidth()) {
if (i + j < chars.length) continue;
builder.append(chars, i, j);
break;
}
builder.append(chars, i, j - 1).append("<br/>");
i = j - 1;
j = 1;
}
builder.append("</html>");
jLabel1.setText(builder.toString());
String longString = "a very very very very very very very very long string";
StringBuilder builder = new StringBuilder("<html>");
char[] chars = longString.toCharArray();
FontMetrics fontMetrics = jLabel1.getFontMetrics(jLabel1.getFont());
for (int beginIndex = 0, limit = 1;; limit++) {
System.out.println(beginIndex + " " + limit + " " + (beginIndex + limit));
if (fontMetrics.charsWidth(chars, beginIndex, limit) < jLabel1.getWidth()) {
if (beginIndex + limit < chars.length) {
continue;
}
builder.append(chars, beginIndex, limit);
break;
}
builder.append(chars, beginIndex, limit - 1).append("<br/>");
beginIndex += limit - 1;
limit = 1;
}
builder.append("</html>");
jLabel1.setText(builder.toString());
楼上代码运行时,怎么出现死循环了
把JTextArea初始值设为不可编辑即可
jTextAreaDescription.setEditable(false);然后设置其两个核心属性:
jTextAreaDescription.setLineWrap(true);
jTextAreaDescription.setWrapStyleWord(true);这样做了以后,当使用setText(String str)改变其显示的文字内容,文字的内容长度超过一行后会自动换行,并且高度会自动动根据行的增减而调整
已解决 5楼代码好用,学习了, 谢谢ThirstyCrow.