5

我不敢相信多行 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);
    }
} 

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

4

2 回答 2

3

我需要自动换行,而不必解析传入的字符串并放置一个<BR>每个 x 字符

设置正文宽度(HTML)。Swing HTML 支持包括基本样式。

我有一些使用 CSS 来限制JLabel某处 SO 的宽度的示例。


啊,是的,就是这样

import javax.swing.*;

class FixedWidthLabel {

    public static void main(String[] srgs) {
        String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus.";
        String html1 = "<html><body style='width: ";
        String html2 = "px'>";

        JOptionPane.showMessageDialog(null, new JLabel(html1+"200"+html2+s));
        JOptionPane.showMessageDialog(null, new JLabel(html1+"300"+html2+s));
    }
}

于 2012-06-14T13:48:50.917 回答
3

如果您想要一个多行标签,那么您只需HTML在其文本中使用,因为它们支持它的使用。因此,使用换行标记来换行或在段落标记</br>中放置单独的行。<p></p>

JLabel不要忘记通过使用标签开始其文本来标记您要使用 HTML <html>

更多可用在这里。

顺便说一句,我忘了检查是否还有其他有关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);
            }
        });
    }
}
于 2012-06-14T13:28:16.647 回答