2014-10-17 50 views
5

如何能像「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」超過JLabel寬度的文本包裝? 我已經嘗試將文本附加到html標籤,但沒有運氣。 請給出您的建議。如何在JLabel中自動換行文字?

+0

可能重複未能提供解決方案時的單詞中有沒有空格字符。我的意思是,當只有一個單詞超過jlabel的寬度時,在這種情況下應該做什麼? – Nadeem 2014-10-17 08:09:03

回答

6

一種常用的方法是不使用JLabel,而是使用JTextArea打開文字換行和換行。然後,您可以修飾JTextArea,使其看起來像JLabel(邊框,背景顏色等)。 [編輯,包括行包每DSquare的評論完整性]

另一種方法是在你的標籤使用HTML,爲seen here。該注意事項有

  1. 您可能必須照顧某些字符的是HTML可以解釋/從純文本轉換

  2. 調用myLabel.getText()現在將包含HTML(與可能 逃脫和/或轉換的字符由於#1

編輯:下面是對JTextArea方法的例子:

enter image description here

import javax.swing.*; 

public class JLabelLongTextDemo implements Runnable 
{ 
    public static void main(String args[]) 
    { 
    SwingUtilities.invokeLater(new JLabelLongTextDemo()); 
    } 

    public void run() 
    { 
    JLabel label = new JLabel("Hello"); 

    String text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
//  String text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " + 
//      "quick brown fox jumped over the lazy dog."; 

    JTextArea textArea = new JTextArea(2, 20); 
    textArea.setText(text); 
    textArea.setWrapStyleWord(true); 
    textArea.setLineWrap(true); 
    textArea.setOpaque(false); 
    textArea.setEditable(false); 
    textArea.setFocusable(false); 
    textArea.setBackground(UIManager.getColor("Label.background")); 
    textArea.setFont(UIManager.getFont("Label.font")); 
    textArea.setBorder(UIManager.getBorder("Label.border")); 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(label, BorderLayout.NORTH); 
    frame.getContentPane().add(textArea, BorderLayout.CENTER); 
    frame.setSize(100,200); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    } 
} 
+0

他特別不希望單詞包裝行爲,而是一個字符。這意味着具有'setLineWrap(true)'但'setWrapStyleWord(false)'的JTextArea可以工作。 – DSquare 2014-10-17 14:21:33

+0

@DSquare:您對換行符是正確的。但是,使用單詞換行也是必要的,以便所有其他不再長於標籤長度的單詞(可能是其中的大部分)仍然適當地包裝。如果沒有它,他們會毫不客氣地打破標籤長度的結束,這可能是不希望的(但在OP中沒有提及)。在我的示例中將word-wrap設置爲false以查看我的意思。 – splungebob 2014-10-17 14:50:51

+0

我同意word-wrap通常是可取的,但這不是問題。由於自動換行覆蓋了默認的字符換行行爲,因此OP不需要這種行爲。請設置「String text =」aaa ... aaa「'(不含空格,有問題的情況下),並查看您的代碼如何解決問題。 – DSquare 2014-10-17 15:06:34