2010-12-01 77 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); 
}