如何在没有HTML的情况下获得多线JLabel(或看起来完全相同的JTextArea)

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

…确定它不是一个更好的方法来处理这个????

如果你想要一个multilne标签,那么你只需在其文本中使用HTML ,因为它们支持使用它。 因此,使用线制动器标签来打破行或在

段落标记中放置单独的行。

不要忘记通过使用标记启动其文本来标记您要为JLabel使用HTML。

更多在这里。

顺便说一句,我忘了检查是否有其他相关的问题关于JLabel使用,至少有几个,检查这个或这个 。 🙂


编辑:

对于工作样本,显示不同的方法,不设置样式并使用段落和标签占用可用空间,请参阅以下内容:

 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("

Some verrrry long text Some verrrry long Some verrrry long text dsa ads oiosi o

"); 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); } }); } }

我需要自动进行换行,而不必解析传入的字符串并将每个x字符放在

设置(HTML)的主体宽度。 Swing HTML支持包括基本样式。

我有一些使用CSS来限制位于SO周围的JLabel宽度的例子。


是啊, 它是 :

 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 = ""; JOptionPane.showMessageDialog(null, new JLabel(html1+"200"+html2+s)); JOptionPane.showMessageDialog(null, new JLabel(html1+"300"+html2+s)); } }