2010-12-01 118 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

如果我想要從用戶那裏獲取多行輸入? – 2011-10-14 11:35:50

+0

@java_enthu:聽起來像一個不同的問題,你應該提交一個新的問題來描述你想要做什麼。 – maerics 2011-10-14 13:49:51

回答

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); 
} 
} 
2

你有正確的想法。只需調整你的textarea的行。

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

這似乎解決了我的問題,使用100個字lorem ipsum。

+0

我怎麼能拿出這個數字(10),缺少一個單詞/字符數並估計一個給定的文本塊會有多少行? textArea不能告訴我它需要多少行嗎?我真的希望有一個自動的方法來做到這一點,而不是硬編碼一些常量,以防有些異常值... – maerics 2010-12-02 01:06:58

+1

我想你只需要自己計算行並動態設置它, rows =字符串長度/列。 – 2010-12-02 01:14:28

-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); 
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); 
}