сделать обертывание надписи текст, устанавливая максимальная ширина
У меня есть JLabel, который имеет много текста на нем. Есть ли способ сделать JLabel максимальной шириной, чтобы он обертывал текст, чтобы он не превышал эту ширину?
спасибо
8 ответов:
нет.
вы можете использовать HTML в метке, но тогда вы должны жестко закодировать тег break.
лучший подход-использовать JTextArea и включить обертывание. Вы можете изменить цвет фона,изображения, шрифт и т. д. текста, чтобы сделать его похожим на этикетке.
обратите внимание, что этот ответ устарел по крайней мере с Java 7.
согласно ответу @ darren, вам просто нужно обернуть строку с
<html>
и</html>
метки:myLabel.setText("<html>"+ myString +"</html>");
вам не нужно жестко кодировать любые теги разрыва. Текст переносится по мере изменения размера компонента.
Да есть два похожих способа (первый с css style= " width:...px", второй с шириной html=...:
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);
JXLabel в проект SwingX поддерживает обтекание
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
.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, чем вы можете попробовать этот подход,
просто отобразите количество символов, которые вы хотите отобразить на метке, используя метод подстроки.
public void setLabel(String label){ String dispLabel=label.substring(0, numOfCharacter); labelComponent.setText(dispLabel); }