[英]Panel with line wrapping and line breaking in Java Swing
如何實現一個支持換行和換行的面板? 我只會在此面板中添加文本標簽和換行符。 標簽應從左向右流動,並在需要時環繞到下一個“行”。 換行符將導致跳至下一行。 我還想使面板垂直滾動。
該解決方案應在Java 5中運行。可以使用SwingX。
說明:文本標簽實際上是JXHyperlink
(來自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
的默認布局管理器)的行為似乎與您可能想要的行為非常接近。 向換行符添加功能似乎是缺少的部分。
建議:也許自定義版式管理器可以通過具有表示換行符的Component
來添加換行符,可以使用add()
方法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
中的第二行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.