jlabel的宽度已经设置了,如果文本长度大于jlabel宽度时,自动换行,该怎么实现啊???急!!  在线等ing
谢谢

解决方案 »

  1.   

    笨方法可以用2-n个JLabel...布局一下。JLabel本身不行,重写一下repaint不知道可以不。
      

  2.   

    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());    
      

  3.   

    用<html>标记应该可以,楼上的方法试一下
      

  4.   

    少打了个加号,重发一次。
        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());    
      

  5.   

    ThirstyCrow 
    楼上代码运行时,怎么出现死循环了
      

  6.   

    我建议不要用JLabel而是用JTextArea代替
    把JTextArea初始值设为不可编辑即可
    jTextAreaDescription.setEditable(false);然后设置其两个核心属性:
        jTextAreaDescription.setLineWrap(true);
        jTextAreaDescription.setWrapStyleWord(true);这样做了以后,当使用setText(String str)改变其显示的文字内容,文字的内容长度超过一行后会自动换行,并且高度会自动动根据行的增减而调整
      

  7.   

    谢谢大家!!
    已解决 5楼代码好用,学习了, 谢谢ThirstyCrow.