我遇到JLabel
问题,并在其中包含纯文本。对于纯文本包装我正在使用LabelView
,我对它给我的结果不是很满意。
我的目标是获取纯文本换行,例如JTextArea
。我尝试了WrappedPlainView
,但它仅适用于JTextComponent
所以我的问题可能是你们知道/或者有一些提前的JLabel
观点吗?
注意:我不想在我的纯文本中添加html。
LabelView:http://docs.oracle.com/javase/6/docs/api/javax/swing/text/LabelView.html
WrappedPlainView:http://docs.oracle.com/javase/6/docs/api/javax/swing/text/WrappedPlainView.html
试试这个例子,看看在调整帧大小时单词是如何被包装的:
import javax.swing.*;
import java.awt.*;
public class Example extends JFrame {
private static final String LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
"Ut in enim velit. Nunc posuere purus ac odio dictum auctor. " +
"Vivamus nec sem mi. Curabitur sed iaculis nibh. Proin vel massa augue. " +
"Aenean laoreet, tellus ut vulputate mollis, justo eros ornare tortor, " +
"vitae venenatis turpis augue id purus. In quis pretium justo. " +
"Quisque interdum sem at augue ultrices molestie. " +
"Nulla consectetur magna nec est malesuada sed ultricies diam gravida. " +
"Curabitur luctus, nulla nec pulvinar fringilla, enim turpis luctus tellus, " +
"non auctor diam ligula quis lectus.";
public Example()
{
JTextArea textArea = new JTextArea(LONG_TEXT);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setOpaque(false);
textArea.setEditable(false);
add(new JScrollPane(textArea), BorderLayout.CENTER);
setMinimumSize(new Dimension(100, 100));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public static void main(String []args)
{
new Example();
}
}
看一下这个例子,你会看到JLabel包装单词的问题:
import javax.swing.*;
import java.awt.*;
public class Example extends JFrame {
private static final String LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
"Ut in enim velit. Nunc posuere purus ac odio dictum auctor. " +
"Vivamus nec sem mi. Curabitur sed iaculis nibh. Proin vel massa augue. " +
"Aenean laoreet, tellus ut vulputate mollis, justo eros ornare tortor, " +
"vitae venenatis turpis augue id purus. In quis pretium justo. " +
"Quisque interdum sem at augue ultrices molestie. " +
"Nulla consectetur magna nec est malesuada sed ultricies diam gravida. " +
"Curabitur luctus, nulla nec pulvinar fringilla, enim turpis luctus tellus, " +
"non auctor diam ligula quis lectus.";
public Example()
{
JLabel label = new JLabel(LONG_TEXT);
add(label, BorderLayout.CENTER);
setMinimumSize(new Dimension(100, 100));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public static void main(String []args)
{
new Example();
}
}
所以我们的目标是让JLabel单词包装在JTextArea中。
注意:在实际项目中,我正在使用javax.swing.text.View,我使用LabelView作为纯文本。
答案 0 :(得分:3)
所以我的问题可能是你们知道/或者有所进展 JLabel观点,
有两种方式,
使用JTextComponent
将JLabel与Html一起使用(缩减并实现up_to版本Html3.2)
发布和SSCCE
编辑:
要使用初始注意:在实际项目中,我正在使用javax.swing.text.View和i 我正在使用LabelView作为纯文本。
JTextComponents
,javax.swing.text.Xxx
和PreferredSize
需要,请参阅public JTextArea(String text, int rows, int columns)
添加1)使用JTextComponent
必须有关于
的决定如果包含在JScrollPane
中没有或没有可见的JScrollBar(覆盖MouseScroll)
或简单添加到容器中,我建议使用BorderLayout或GridLayout,然后JTextArea可以调整大小(看起来像),也可以使用容器
可滚动的JComponents将添加到JScrollPane
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
public class ExampleJTextArea extends JFrame {
private /*static*/ final String LONG_TEXT = "Lorem ipsum dolor sit amet, "
+ "consectetur adipiscing elit. Ut in enim velit. Nunc posuere "
+ "purus ac odio dictum auctor. Vivamus nec sem mi. Curabitur sed "
+ "iaculis nibh. Proin vel massa augue. Aenean laoreet, tellus ut "
+ "vulputate mollis, justo eros ornare tortor, vitae venenatis "
+ "turpis augue id purus. In quis pretium justo. Quisque interdum "
+ "sem at augue ultrices molestie. Nulla consectetur magna nec est "
+ "malesuada sed ultricies diam gravida. Curabitur luctus, nulla "
+ "nec pulvinar fringilla, enim turpis luctus tellus, non auctor "
+ "diam ligula quis lectus.";
public ExampleJTextArea() {
JTextArea textArea = new JTextArea(LONG_TEXT, 10, 25);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setOpaque(false);
textArea.setEditable(false);
textArea.setBorder(new EmptyBorder(10,10,2,2));
add(/*new JScrollPane(*/textArea/*), BorderLayout.CENTER*/);
//setMinimumSize(new Dimension(100, 100));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ExampleJTextArea exampleJTextArea = new ExampleJTextArea();
}
});
}
}
添加2)use JLabel with Html (reduced and implemented up_to version Html3.2), and another variations
答案 1 :(得分:0)
我同意@mKorbel,有两种方法可以通过JLabel
来实现正确的包装词:
a)创建自己的自定义组件,在包装时模拟JLabel
样式。
public class CustomWrappedLabel extends JTextArea {
public CustomWrappedLabel(String text) {
super(text);
setBackground(null);
setEditable(false);
setBorder(null);
setLineWrap(true);
setWrapStyleWord(true);
setFocusable(false);
}
}
<强>用法强>:
new CustomWrappedLabel("Hey you've just tried multi-line text!");
确保将行数设置为超过2行以实现所需的行为。
wrappedLabelObj.setRows(2)
。使用pack()
正确计算父组件的高度。
b)使用html自动处理<html>
标记内的包装文字。
new JLabel("<html>Hey you've just tried html multi-line text version!</html>")
您可以使用<br />
换行。
希望这有帮助!
答案 2 :(得分:0)
一个非常老的帖子,但万一有人再次遇到这个问题......
这些解决方案似乎都不适用于我(也许是因为包含我的JLabel的JPanel被JScrollPane查看了?),而我无法让JTextAreas工作,因为它有一些令人讨厌的bug但不会缩小。
相反,这是我可以找到的最简单的解决方案,用于在JLabel中包装文本,由Tony Fecteau在this page上提供:只需在html格式的JLabel上使用setPreferredSize()
,它就会自动启动成长和萎缩!
panel = new JPanel();
JLabel label = new JLabel("<html>" + "long text to display" + "</html>");
label.setPreferredSize(new Dimension(1, 1)); // this is the key part.
panel.add(label, "grow");
答案 3 :(得分:0)
尝试
jLabel.setText(String.format("<html><body style=\"text-align: justify; text-justify: inter-word;\">%s</body></html>",LONGTEXT));