2011-08-08 50 views
9

如標題所示:我需要將JLabel合併到JFrame中,但JLabel中的文本太長,所以我需要添加一些換行符。 JLabel中的文本是從一個在線的XML文件中獲得的,所以我不能只改變文本以包含換行符。如何將長字符串合併到JLabel中

這個代碼在這種情況下字符串我想換行的一些添加到字符串訴XML文件

Element element = (Element)nodes1.item(i); 
      String vær = getElementValue(element,"body"); 
      String v = vær.replaceAll("<.*>", ""); 
      String forecast = "Vær: " + v; 

中提取數據。絃樂五載從XML文件解析的數據。字符串預測返回並設置爲JLabel的文本。

只是問問是否有什麼東西是未完成的,在此先感謝!

回答

12

我建議使用JTextArea來代替,然後打開包裝。在JLabel中做到這一點的唯一方法是將換行符<br />,如果您事先不知道該文本,則在您的情況下不起作用(至少不容易)。

JTextArea更靈活。默認情況下,它看起來不同,但您可以擺弄一些顯示屬性,使其看起來像JLabel


How to Use Text Areas教程採取了一個簡單的修改使用示例 -

public class JTextAreaDemo { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() {   
       createAndShowGUI(); 
      } 
     }); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame("JTextArea Demo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     final JPanel panel = new JPanel(); 
     JTextArea textArea = new JTextArea(
       "If there is anything the nonconformist hates worse " + 
       "than a conformist, it's another nonconformist who " + 
       "doesn't conform to the prevailing standard of nonconformity.", 
       6, 
       20); 
     textArea.setFont(new Font("Serif", Font.ITALIC, 16)); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     textArea.setOpaque(false); 
     textArea.setEditable(false); 

     panel.add(textArea); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

enter image description here

+1

+1,你可能還想讓組件不透明(即'setOpaque(false )')。 – mre

+0

我收錄了一個簡單的使用示例。如果您覺得這是不必要的,請讓我知道,我會回滾。 :) – mre

+0

但是我怎樣才能調整JTextArea的大小,使它只包含每行上的特定字符。例如在換行前每行有30個Charcaters? Cus我想讓JPanel遍佈屏幕而不是打包(); –

5

JLabel能夠顯示HTML文本,即如果您用<html>your text<html>包裝文本,它可能會包裝文本。這還沒有測試,所以YMMV。

+1

+1,這裏是一個很好的教程 - [如何在Swing組件中使用HTML](http://download.oracle.com/javase/tutorial/uiswing/components/html.html) – mre

1

您可以動態地告訴你一個JLabel來調整自身以適應文本。

,如果你不使用一個LayoutManager嘗試:

 jLabel.setText ("A somewaht long message I would not want to 
stop"); 
     jLabel.setSize(jLabel.getPreferredSize()); 

如果您使用的是佈局管理器這個片段應該工作:

 jLabel.setText ("A somewaht long message I would not want to 
stop"); 
     jLabel.validate(); 
相關問題