Java的:在换行符的JLabel?
-
12-09-2019 - |
题
我试图与多行文本的一个Swing的JLabel。它补充得很好,但换行不来通过。我该怎么做呢?另外,我能不能指定一个最大宽度为JLabel中并知道该文本将在一个div包裹,怎么样?
private void addLegend() {
JPanel comparisonPanel = getComparisonPanel();
//this all displays on one line
JLabel legend = new JLabel("MMM FFF MMM FFFO O OOM M MMMM.\nMMM FFF MMM FFFO O OOM M MMMM.\nMMM FFF MMM FFFO O OOM M MMMM.\n");
comparisonPanel.add(legend);
}
解决方案
使用HTML中的setText,e.g。
myLabel.setText("<html><body>with<br>linebreak</body></html>");
其他提示
默认情况下,摇摆不换行文本。如果你在一个JLabel指定大小只会画画适合,然后添加文本“......”到最后的部分。
如所建议可以使用HTML,以使换行。不过,其实我已经创建了一个定制的Swing UI委托不久前实现这一点,更是: MultiLineLabelUI
这将包装你的文本以适应可用空间,也尊重硬换行符。如果您选择尝试一下,它是那样简单:
JLabel label = new JLabel("Text that'll wrap if necessary");
label.setUI(MultiLineLabelUI.labelUI);
或可替换地使用,除了环绕文字支持垂直和水平文本对齐定制MultiLineLabel
类。
<强>更新强>
我失去了与原始代码样本域。 https://github.com/sasjo/multiline :现在可以在github代替观察p>
如果您在HTML设置段落宽度你可以得到自动断线。
label.setText("<html><p style=\"width:100px\">"+paragraph+"</p></html>");
您可以把HTML一个JLabel内,并使用断行标签来实现这一目标。
什么在JTextArea使用包裹功能?
String text = "some really long string that might need to"+
"be wrapped if the window is not wide enough";
JTextArea multi = new JTextArea(text);
multi.setWrapStyleWord(true);
multi.setLineWrap(true);
multi.setEditable(false);
JLabel single = new JLabel(text);
JPanel textpanel = new JPanel(new GridLayout(2,1));
textpanel.add(multi);
textpanel.add(single);
JFrame frame = new JFrame();
frame.add(textpanel);
frame.pack();
frame.setVisible(true);
简单,使用HTML。 Java的Swing组件虽然没有为HTML提供了一个“梦幻般的支持,你可以使用它的这种简单的目的。
label.setText("<html>This is first line.<br/>This is second line.</html>");
我没指定标签的最大宽度,但你可以指定一个具体的宽度。 通过测量一个JLabel的当前宽度,我们只能申请新的固定的,如果中的JLabel的宽度是高于我们的maxWidth:
JLabel label = new JLabel("<html>" + myVeryLongMessage + "<html>");
int maxWidth = 400;
Dimension size = label.getPreferredSize();
if (size.width > maxWidth) {
// Estimate the number of lines
int lineCount = (int) Math.ceil(((double) size.width) / maxWidth);
lineCount += 1; // Add one extra line as reserve
size.width = maxWidth; // Apply the maximum width
// Increase the height so that all lines will be visible
size.height *= lineCount;
label.setPreferredSize(size);
}
不隶属于 StackOverflow