如何实现支持换行和换行的面板?我只会在此面板中添加文本标签和换行符。标签应该从左到右流动,如果需要,可以换行到下一个“行”。换行符会导致跳转到下一行。我还想让面板垂直滚动。
该解决方案应该在 Java 5 中运行。可以使用 SwingX。
澄清:文本标签实际上是JXHyperlink
s(来自 SwingX),即面板包含可点击的标签。这就是我不能只使用
JTextArea
.
如何实现支持换行和换行的面板?我只会在此面板中添加文本标签和换行符。标签应该从左到右流动,如果需要,可以换行到下一个“行”。换行符会导致跳转到下一行。我还想让面板垂直滚动。
该解决方案应该在 Java 5 中运行。可以使用 SwingX。
澄清:文本标签实际上是JXHyperlink
s(来自 SwingX),即面板包含可点击的标签。这就是我不能只使用
JTextArea
.
更新:我错过了超链接支持的请求。不知道如何使用 EditorPane 来做到这一点。
JTextArea 完全符合您的描述。
JTextArea textArea = new JTextArea();
JScrollPanel sPane = new JScrollPane(textArea);
替代文字 http://img187.imageshack.us/img187/3238/wraprn0.png
此示例不是来自面板(即容器),而是来自 JLabel,旨在显示内容。
您可以在内容中使用 HTML,并在每次中断时使用 <br>。您应该根据组件调整大小的规则以编程方式计算中断。
这是代码:
import javax.swing.*;
import java.awt.*;
public class Wrap {
public static void main( String [] args ) {
JFrame frame = new JFrame("Wrap test");
String text = "<html>This<br>is<br>a<br>multiline<br>label</html>";
frame.add( new JLabel( text ) );
frame.pack();
frame.setVisible( true );
}
}
我发现JTextPane
了,我以前由于某种原因忽略了它。这门课做我需要的。
不过感谢您的帮助。:)
虽然它可能不是您正在寻找的解决方案,但从您的要求来看,似乎定制LayoutManager
可能能够实现您所追求的。通过设计和分配一个允许换行的自定义布局管理器Container
(例如Panel
),应该可以有一个Panel
允许换行的。
Java 教程中的在容器中布局组件一文将提供有关布局管理器如何在 Java 中工作的一般信息,特别是,创建自定义布局管理器将提供有关如何使自定义布局管理器应用于.Container
FlowLayout
(的默认布局管理器)的行为Panel
似乎与您可能追求的行为非常接近。为换行添加功能似乎是缺失的部分。
建议:或许自定义的LayoutManager可以通过aComponent
表示换行符来添加换行符,Container
使用add()
方法可以添加到a中。
例如,Component
在自定义布局管理器中有一个类常量,例如 (a hypothetical) LineBreakLayout.LINE_BREAK
,并将其添加到Container
可以告诉自定义布局管理器移动到下一行。也许实现可以像:
Panel p = new Panel(new LineBreakLayout());
p.add(new Label("First Line"));
p.add(LineBreakLayout.LINE_BREAK);
p.add(new Label("Second Line"));
然后,上述假设 将在一行中LineBreakLayout
呈现第一个,在第二行中呈现第二个。Label
Label