Java 制作一个JLabel包装它';通过设置最大宽度来设置文本的宽度

Java 制作一个JLabel包装它';通过设置最大宽度来设置文本的宽度,java,user-interface,swing,jlabel,Java,User Interface,Swing,Jlabel,我有一个JLabel,上面有很多文本。是否有办法使JLabel具有最大宽度,以便它将包装文本,使其不超过此宽度 谢谢不用了 可以在标签中使用HTML,但必须硬编码break标记 更好的方法是使用JTextArea并打开包装。您可以更改文本的背景、前景、字体等,使其看起来像标签 注意,至少从Java 7开始,这个答案就过时了。 根据@darren的回答,您只需使用和标记来包装字符串: myLabel.setText("<html>"+ myString +"</html>"

我有一个JLabel,上面有很多文本。是否有办法使JLabel具有最大宽度,以便它将包装文本,使其不超过此宽度

谢谢

不用了

可以在标签中使用HTML,但必须硬编码break标记

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

注意,至少从Java 7开始,这个答案就过时了。

根据@darren的回答,您只需使用
标记来包装字符串:

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

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

是的,有两种类似的方式(第一种是css style=“width:…px”,第二种是html width=…:

一,

labelText=String.format(“%s”,宽度,文本);
二,

labelText=String.format(“%s”,宽度,文本);
有一个很好的技巧,滚动到文章末尾

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);
或者干脆用

myLabel.setText("<html>"+ myString +"</html>");
myLabel.setText(“+myString+”);
支架包装中的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 biglabel=newjlabel(需要包装的大量文本)

”;
除了将文本包装在
标签中,您还必须将标签放入符合首选高度并将宽度设置为最大值的容器中。例如,您可以将标签放置在
边框布局的北面

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

        });
    }

}
下面是一个简单但完整的工作程序来说明这一点。您可以按任何方式调整框架的大小;标签将占据整个宽度,高度将相应调整以包裹文本。请注意,我所做的只是使用
标记,并将标签放在
边框布局的北部

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

        });
    }

}
import javax.swing.JFrame;
导入javax.swing.SwingUtilities;
导入javax.swing.JPanel;
导入javax.swing.JLabel;
导入java.awt.BorderLayout;
导入java.awt.Dimension;
公共类标签纸{
公共静态JPanel createPanel(){
JLabel标签=新的JLabel();
label.setText(“”)
+“Lorem ipsum dolor sit amet,献祭精英。”
+“Duis是一只小乌尔纳。Phasellus tristique interdum mauris,”
+“前庭purus suscipit eget.Aenean massa elit,accumsan”
+“非流氓级,在bibendum和est Sagitti中的地方名言”
+“乌尔纳·艾库利斯·奎斯·萨吉蒂·维利特·科莫多自然社会”
+“因怀孕而产下的小牛”
+“南奎斯-拉库斯-莫里斯·菲塞勒斯·塞姆-自由女神,康瓦利斯”
+“马蒂斯·萨吉提斯·维尔,拍卖人埃吉特·伊普苏姆。胎动永远”
+“在一个特殊的地方,一个精英阶层,在一个特殊的地方”
+“orci a tortor consequeat consequeat vitae sit amet elite.present”
+“康莫多·拉克斯是一辆大型汽车。库拉比图尔·亨德雷特”
+“这是一个很好的例子。

” + +“秃鹫,乌鲁斯·胡斯托·劳里特·奥古斯,封建主义的智者” +“这是一种在酒后饮用的酒。” +“Praesent et mauris non tellus孕妇mollis.在hac habitasse” +“虎口浮士鱼同侧前庭前板” +前庭 +“折磨人的权杖是拉奥里特,而不是拉卡斯” +“不,不,不,不,不,不” +“怀孕期间,elit velit malesuada arcu,nec aliquam lectus” +“在尼布·亨德雷利特等地的大教堂里,有一座大教堂” +“生命元素,生命元素,生命元素,生命元素” +“厄洛斯,达皮布斯在埃利芬德坐着阿梅特,布兰迪特·埃吉特·普鲁斯。” +“佩伦茨克欧洲摩利斯或塞德维尼那提斯钻石暂时” +“康格。

” + ""); JPanel panel=newjpanel(newborderlayout()); 面板。添加(标签,边框布局。北); 面板。设置首选尺寸(新尺寸(640480)); 返回面板; } /** *@param args */ 公共静态void main(字符串[]args){ SwingUtilities.invokeLater(新的Runnable(){ @凌驾 public void run(){ JFrame=新JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(createPanel()); frame.pack(); frame.setVisible(true); } }); } }
如果您只想使用JLabel,则可以尝试这种方法

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

public void setLabel(String label){
    String dispLabel=label.substring(0, numOfCharacter);
    labelComponent.setText(dispLabel);
}
包装可以工作,但并非在所有情况下都可以。如果父容器使用FlowLayout,则它将无法工作。因此,我将其设置为BoxLayout。请查看此代码段:

javax.swing.JPanel pRefundNote = new javax.swing.JPanel(); 
javax.swing.JLabel lbNote = new javax.swing.JLabel();

pRefundNote.setAlignmentX(0.0F); 
pRefundNote.setMaximumSize(new java.awt.Dimension(32767, 33)); 
pRefundNote.setLayout(new javax.swing.BoxLayout(pRefundNote, javax.swing.BoxLayout.X_AXIS)); 

lbNote.setText("<html>Select items using Shift or Ctrl and Up/Down keys or Mouse</html>"); 
lbNote.setVerticalAlignment(javax.swing.SwingConstants.TOP);
lbNote.setVerticalTextPosition(javax.swing.SwingConstants.TOP); 
pRefundNote.add(lbNote);
javax.swing.JPanel pRefundNote=newjavax.swing.JPanel();
javax.swing.JLabel lbNote=newjavax.swing.JLabel();
pRefundNote.setAlignmentX(0.0F);
setMaximumSize(新java.awt.Dimension(32767,33));
setLayout(新的javax.swing.BoxLayout(pRefundNote,javax.swing.BoxLayout.X_轴));
lbNote.setText(“使用Shift或Ctrl键和上/下键或鼠标选择项目”);
setVerticalAlignment(javax.swing.SwingConstants.TOP);
lbNote.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
序言注释。添加(lbNote);
不要添加

,因为即使你放大你的父文本,它也会打断你的文本
javax.swing.JPanel pRefundNote = new javax.swing.JPanel(); 
javax.swing.JLabel lbNote = new javax.swing.JLabel();

pRefundNote.setAlignmentX(0.0F); 
pRefundNote.setMaximumSize(new java.awt.Dimension(32767, 33)); 
pRefundNote.setLayout(new javax.swing.BoxLayout(pRefundNote, javax.swing.BoxLayout.X_AXIS)); 

lbNote.setText("<html>Select items using Shift or Ctrl and Up/Down keys or Mouse</html>"); 
lbNote.setVerticalAlignment(javax.swing.SwingConstants.TOP);
lbNote.setVerticalTextPosition(javax.swing.SwingConstants.TOP); 
pRefundNote.add(lbNote);