2009-01-20 41 views
1

如何实现支持换行和换行的面板? 我只会将文本标签和换行符添加到此面板。 标签应该从左向右流动,如果需要 ,则打包到下一个“行”。换行符会导致跳到下一行。 我也想让面板垂直滚动。在Java Swing中使用线包装和换行的面板

该解决方案应该在Java 5中工作。可以使用SwingX。

说明:文本标签实际上是JXHyperlink(来自SwingX), ,即面板包含可点击标签。这就是我不能只用 JTextArea的原因。

回答

1

我发现JTextPane,我曾由于某种原因,之前被忽视。这个班做我需要的。

尽管感谢您的帮助。 :)

1

更新:我错过了超链接支持的请求。不知道如何使用EditorPane做到这一点。

JTextArea完全符合您所描述的内容。

JTextArea textArea = new JTextArea(); 
JScrollPanel sPane = new JScrollPane(textArea); 
+0

我想使标签可点击,以便他们可以表现得像超链接。我可以用TextArea来做吗? (我不想在HTML中使用JEditorPane。) – Kaarel 2009-01-20 12:40:14

+0

任何反对JEditorPane的原因(我只是好奇)? – basszero 2009-01-20 12:47:47

0

虽然这可能不是你在寻找的是一个解决方案,但是从你的要求,这似乎是一个自定义的LayoutManager可能能够达到你所追求的。通过设计和分配允许换行符到Container(如Panel)的自定义布局管理器,应该可以有一个允许换行的Panel

The Java TutorialsLaying Out Components Within a Container文章将提供布局管理器在Java中是如何工作的一般信息,以及特别是Creating a Custom Layout Manager将提供关于如何使一个自定义布局管理器应用到Container信息。

FlowLayoutPanel的默认布局管理器)的行为看起来与您之后的行为非常接近。为换行添加功能看起来像是缺失的部分。

建议:也许自定义布局管理器可具有由具有Component表示换行,这可以通过使用add()方法被添加到Container到添加换行符的能力。

例如,有一个类的自定义布局管理不断Component,如(假设的)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

1

alt text 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); 

    } 
}