使JLabel通过设置最大宽度来包装它的文本

我有一个有很多文字的JLabel。 有没有办法让JLabel有一个最大宽度,以便它将包装文本,使其不超过这个宽度?

谢谢

没有。

您可以在标签中使用HTML,但是您必须对中断标签进行硬编码。

更好的方法是使用JTextArea并打开。 您可以更改文字的背景,前景,字体等,使其看起来像一个标签。

注意,这个答案至less在Java 7中已经过时了。

根据@ darren的回答,你只需要用<html></html>标签包装string:

 myLabel.setText("<html>"+ myString +"</html>"); 

您不需要对任何中断标签进行硬编码。 文本在组件resize时进行换行。

是的,有两种类似的方式(第一种是CSS样式=“宽度:… px”,第二种是HTML WIDTH = …:

1。

 labelText = String.format("<html><div style=\"width:%dpx;\">%s</div><html>", width, text); 

2。

 labelText = String.format("<html><div WIDTH=%d>%s</div><html>", width, text); 

或者干脆使用

 myLabel.setText("<html>"+ myString +"</html>"); 

SwingX项目中的 JXLabel支持包装

 JXLabel label = new JXLabel(somelongtext); label.setLineWrap(true); 

如果您使用段落标签,则可以使用不带硬编码中断标签的HTML。

 JLabel biglabel = new JLabel("<html><p>A lot of text to be wrapped</p></html>"); 

这里有一个很好的技术,滚动到文章的结尾。

 JLabel labelBeingUsed = myLabel; View view = (View) labelBeingUsed.getClientProperty(BasicHTML.propertyKey); view.setSize(scrollPane1.getWidth(), 0.0f); float w = view.getPreferredSpan(View.X_AXIS); float h = view.getPreferredSpan(View.Y_AXIS); labelBeingUsed.setSize((int) w, (int) h); 

除了在<html>标签中包装文本之外,还必须将标签放入容器中,该容器尊重首选高度并将宽度设置为最大值。 例如,您可以将标签放在BorderLayout

这是一个简单但完整的工作程序来说明这一点。 您可以以任何您想要的方式调整框架的大小; 标签将占据整个宽度,高度将相应地调整以包装文本。 注意,我正在做的是使用<html>标签并将标签放在BorderLayout的NORTH中。

 import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.BorderLayout; import java.awt.Dimension; public class LabelWrap { public static JPanel createPanel() { JLabel label = new JLabel(); label.setText("<html>" + "<h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h3>" + "<p>Duis a tincidunt urna. Phasellus tristique interdum mauris, " + "ut vestibulum purus suscipit eget. Aenean massa elit, accumsan " + "non faucibus vel, dictum placerat urna. In bibendum est sagittis " + "urna iaculis quis sagittis velit commodo. Cum sociis natoque " + "penatibus et magnis dis parturient montes, nascetur ridiculus " + "mus. Nam quis lacus mauris. Phasellus sem libero, convallis " + "mattis sagittis vel, auctor eget ipsum. Vivamus molestie semper " + "adipiscing. In ac neque quis elit suscipit pharetra. Nulla at " + "orci a tortor consequat consequat vitae sit amet elit. Praesent " + "commodo lacus a magna mattis vehicula. Curabitur a hendrerit " + "risus. Aliquam accumsan lorem quis orci lobortis malesuada.</p>" + "<p>Proin quis viverra ligula. Donec pulvinar, dui id facilisis " + "vulputate, purus justo laoreet augue, a feugiat sapien dolor ut " + "nisi. Sed semper augue ac felis ultrices a rutrum dui suscipit. " + "Praesent et mauris non tellus gravida mollis. In hac habitasse " + "platea dictumst. Vestibulum ante ipsum primis in faucibus orci " + "luctus et ultrices posuere cubilia Curae; Vestibulum mattis, " + "tortor sed scelerisque laoreet, tellus neque consectetur lacus, " + "eget ultrices arcu mi sit amet arcu. Nam gravida, nulla interdum " + "interdum gravida, elit velit malesuada arcu, nec aliquam lectus " + "velit ut turpis. Praesent pretium magna in nibh hendrerit et " + "elementum tellus viverra. Praesent eu ante diam. Proin risus " + "eros, dapibus at eleifend sit amet, blandit eget purus. " + "Pellentesque eu mollis orci. Sed venenatis diam a nisl tempor " + "congue.</p>" + "</html>"); JPanel panel = new JPanel(new BorderLayout()); panel.add(label, BorderLayout.NORTH); panel.setPreferredSize(new Dimension(640, 480)); return panel; } /** * @param args */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(createPanel()); frame.pack(); frame.setVisible(true); } }); } } 

如果你只想使用JLabel,那么你可以尝试这种方法,

只需使用子string方法显示要在标签上显示的字符数。

 public void setLabel(String label){ String dispLabel=label.substring(0, numOfCharacter); labelComponent.setText(dispLabel); }