2009-01-20 37 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); 

    } 
}