2011-08-08 7 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; 

私は、文字列vにいくつかの改行を追加したい文字列を抽出します。文字列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のサイズを変更して、各行に特定のcharcatersを入れることができます。改行前の各行に30文字のCharcaters? Cus私はJPanelが画面上にあり、pack()ではないことを望みます。 –

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(); 
関連する問題