Nic*_*ner 23 java user-interface swing jlabel
我正在尝试使用多行文本制作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);
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ler 45
在setText中使用HTML,例如
myLabel.setText("<html><body>with<br>linebreak</body></html>");
Run Code Online (Sandbox Code Playgroud)
默认情况下,Swing不会换行文本.如果在JLabel上指定一个大小,它将只绘制适合的文本部分,然后在末尾添加"...".
如建议您可以使用HTML来启用换行.但是,我实际上不久前创建了一个自定义Swing UI委托来实现这一目标甚至更多:MultiLineLabelUI.
它将包装您的文本以适应可用空间并且还尊重硬线断点.如果您选择试用它,它就像:
JLabel label = new JLabel("Text that'll wrap if necessary");
label.setUI(MultiLineLabelUI.labelUI);
Run Code Online (Sandbox Code Playgroud)
或者使用自定义MultiLineLabel
类,除了包装文本外,还支持垂直和水平文本对齐.
UPDATE
我丢失了原始代码示例的域名.它现在可以在github上查看:https://github.com/sasjo/multiline
如果在html中设置段落宽度,则可以获得自动换行符.
label.setText("<html><p style=\"width:100px\">"+paragraph+"</p></html>");
Run Code Online (Sandbox Code Playgroud)
在 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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43569 次 |
最近记录: |