代码之家  ›  专栏  ›  技术社区  ›  Aly

通过设置最大宽度使jLabel对文本进行换行

  •  74
  • Aly  · 技术社区  · 15 年前

    我有一个jlabel上面有很多文字。有没有办法使jLabel有一个最大宽度,这样它就可以包装文本,使其不超过这个宽度?

    谢谢

    8 回复  |  直到 9 年前
        1
  •  45
  •   Erick Robertson    9 年前

    不。

    您可以在标签中使用html,但随后必须硬编码break标记。

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

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

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

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

    不需要硬编码任何中断标记。当组件调整大小时,文本将换行。

        2
  •  45
  •   Alexander.Berg    15 年前

    有两种类似的方法(第一种是css style=“width:…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);
    
        3
  •  33
  •   darren    13 年前

    或者干脆用

    myLabel.setText("<html>"+ myString +"</html>");
    
        4
  •  11
  •   kleopatra Aji kattacherry    13 年前

    Jxlabel在 SwingX project 支持包装

    JXLabel label = new JXLabel(somelongtext);
    label.setLineWrap(true);  
    
        5
  •  10
  •   demBones Paul Taylor    13 年前

    如果使用段落标记,则可以使用HTML而不必硬编码中断标记。

    JLabel biglabel = new JLabel("<html><p>A lot of text to be wrapped</p></html>");
    
        6
  •  6
  •   Sam Barnum    13 年前

    有很好的技巧 here ,滚动至文章结尾。

    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);
    
        7
  •  6
  •   Andrei Vajna II    13 年前

    而不是将文本换行 <html> 标签,您还必须将标签放入一个容器中,该容器遵循首选高度并将宽度设置为最大值。例如,可以将标签放在 BorderLayout .

    这里有一个简单但完整的工作程序来说明这一点。您可以根据需要调整框架的大小;标签将占据整个宽度,高度将相应地调整以环绕文本。注意,我所做的就是 <HTML& GT; 标记并将标签放在 边界布局 .

    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);
                }
    
            });
        }
    
    }
    
        8
  •  -6
  •   Rajj    11 年前

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

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

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