2010-12-01 12 views
2

私のJava GUIアプリケーションでは、テキストをエンドユーザにすばやく表示する必要があるため、JOptionPaneユーティリティメソッドはよく似ています。さらに、テキストは選択可能(コピー&ペースト用)でなければならず、多少長い(約100ワード)ため、ウィンドウにうまく収まらなければなりません(スクリーン上のテキストなし)。理想的には、一度にすべてを表示して、ユーザーが対話する必要なしに読むことができるようにする必要があります。そのため、スクロールバーは望ましくありません。JOptionPane.showMessageDialog JTextAreaメッセージを切り捨てます

私はJTextAreaにテキストを入れて、JOptionPane.showMessageDialogのメッセージにそれを使用するのは簡単だと思ったが、テキストを切り捨てるように見えた!

public static void main(String[] args) { 
    JTextArea textArea = new JTextArea(); 
    textArea.setText(getText()); // A string of ~100 words "Lorem ipsum...\nFin." 
    textArea.setColumns(50); 
    textArea.setOpaque(false); 
    textArea.setEditable(false); 
    textArea.setLineWrap(true); 
    textArea.setWrapStyleWord(true); 
    JOptionPane.showMessageDialog(null, textArea, "Truncated!", JOptionPane.WARNING_MESSAGE); 
} 

Dialog with truncated text

どのように私は、テキストがコピー/貼り付けのためのスクロールバーおよび選択せずに完全にオプション区画に収まるように得ることができますか?

+0

何場合ユーザーからの複数の入力行を取得したいですか? –

+0

@ java_enthu:別の問題のように聞こえるので、何をしたいかを説明する新しい質問を提出する必要があります。 – maerics

答えて

6
import java.awt.*; 
import javax.swing.*; 

public class TextAreaPreferredHeight2 
{ 
public static void main(String[] args) 
{ 
    String text = "one two three four five six seven eight nine ten "; 
    JTextArea textArea = new JTextArea(text); 
    textArea.setColumns(30); 
    textArea.setLineWrap(true); 
    textArea.setWrapStyleWord(true); 
    textArea.append(text); 
    textArea.append(text); 
    textArea.append(text); 
    textArea.append(text); 
    textArea.append(text); 
    textArea.setSize(textArea.getPreferredSize().width, 1); 
    JOptionPane.showMessageDialog(
    null, textArea, "Not Truncated!", JOptionPane.WARNING_MESSAGE); 
} 
} 
+0

パーフェクト;それはまさに私が必要なものです。好奇心の中で、マジックナンバー "1"はどのようにこの作品を作っていますか?私は無作為に他の値(-1、0)を試しましたが効果はありませんでした。 – maerics

+1

私は1がマジックナンバーだとは思わない、キーナンバーは折り返しを起こす幅です。 – camickr

+0

ああ、今、私はそれについて考えていますが、おそらく 'setSize'ではなく' setPreferredSize'で遊んでいたと思います。ありがとう! – maerics

2

あなたは正しい考えを持っています。テキストエリアの行を調整するだけです。

textArea.setRows(10); // or value that seems acceptable to you... 

これは、lorem ipsumの100語を使用して、この問題を解決したようです。

+0

どのように単語/文字カウントをし、与えられたテキストの塊がいくつの行を推定するのに足りない、その数字(10)を思いつくことができますか? textAreaは、必要な行の数を教えてくれませんか?私は本当に、いくつかの異常値がある場合に備えて、いくつかの定数をハードコーディングするのではなく、自動的にこれを行うことを望んでいました... – maerics

+1

あなたは自分で行を計算して動的に設定する必要があります。 rows = string-length/columnsです。 –

-1

この試してみてください:あなたは、未知の長さの文字列を表示する必要がある場合は、「オンザフライ」行の数を設定することができます

JTextArea textArea = new JTextArea(); 
textArea.setText(getText()); 
textArea.setSize(limit, Short.MAX_VALUE); // limit = width in pixels, e.g. 500 
textArea.setWrapStyleWord(true); 
textArea.setLineWrap(true); 
+0

-1は、私が1時間前に与えた答えのようです。私は重複した投稿の必要性を見ません。 – camickr

3

を:

public static void showMessageDialogFormatted(String msg, String title, int messageType, int columnWidth) { 
    JTextArea textArea = new JTextArea(msg); 
    textArea.setColumns(columnWidth); 
    textArea.setRows(msg.length()/columnWidth + 1); 
    textArea.setLineWrap(true); 
    textArea.setEditable(false); 
    textArea.setWrapStyleWord(true); 
    JOptionPane.showMessageDialog(null, textArea, title, messageType); 
} 
関連する問題