我不能相信多行JLabel最快的解决方案是以下解决方案(文本来自var,所以我不想每x个字符手动放置HTML代码,这太丑陋了):

public class JMultilineLabel extends JTextArea{
    private static final long serialVersionUID = 1L;
    public JMultilineLabel(String text){
        super(text);
        setEditable(false);
        setCursor(null);
        setOpaque(false);
        setFocusable(false);
        setFont(UIManager.getFont("Label.font"));
        setWrapStyleWord(true);
        setLineWrap(true);
    }
}

...确定这不是处理此问题的更好方法吗????

最佳答案

如果您想要一个多重标签,则只需在其文本中使用HTML即可,因为它们支持它的使用。因此,请使用行制动标签</br>断开行或将单独的行放在<p></p>段落标签中。

不要忘记通过以JLabel标记开始文本来标记要使用HTML的<html>

More available here.

BTW 我忘了检查是否还有其他有关JLabel使用的相关问题,并且至少有几个问题,请检查thisthis。 :)

编辑:

对于一个工作示例,显示了一种不同的方法,没有设置样式,并且使用了段落和标签占用了可用空间,请参见以下内容:

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.*;

public class LabelHTMLAutoResize {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JPanel p = new JPanel(new BorderLayout());
                JLabel l = new JLabel("<html><p> Some verrrry long text  Some verrrry long  Some verrrry long text dsa ads oiosi o</p>");
                l.setVerticalAlignment(SwingConstants.TOP);
                l.setOpaque(true);
                l.setBackground(Color.green);
                p.add(l);
                f.setContentPane(p);
                /* good practice is to use f.pack(); and let the size be automatically calculated but we want to show line wrapping thus frame size is set */
                f.setSize(200, 200);
                f.setVisible(true);
            }
        });
    }
}

10-07 19:07
查看更多