3

我喜欢 JOptionPane 的便利性,但不喜欢它不换行的事实。所以我决定按如下方式实现这个问题的答案:

public static void main(String[] args)
 {
  String text = "one two three four five six seven eight nine ten ";
  text = text + text + text + text + text
  JTextArea textArea = new JTextArea(text);
  textArea.setColumns(30);
  textArea.setLineWrap( true );
  textArea.setWrapStyleWord( true );
  textArea.append(text);
  textArea.setSize(textArea.getPreferredSize().width, 1); //Explanation for this line in the comments of the linked thread
  JOptionPane.showMessageDialog(
   null, textArea, "Not Truncated!", JOptionPane.WARNING_MESSAGE);
 }

这在 Mac OS X 上运行良好:

在此处输入图像描述

但在 Windows 8 上不起作用,因为随着 JTextArea 的高度随着多行的增加而增加,窗口不会调整大小,因此将按钮推开:

在此处输入图像描述

有什么我做错了吗?两个平台上的 Java Swing 行为是否不同?我该如何解决这个问题?

4

1 回答 1

5

我发现问题实际上不是 JTextArea,而是我在程序的其他地方使用以下命令为 Windows 8 设置了默认外观的事实

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

删除该行并默认为 Metal Look and Feel(就像我在顶部发布的片段中的情况)使一切看起来正确。我什至没有想到这可能是问题,直到我意识到上面主要方法中的对话框看起来与我的屏幕截图中的不同。

我的一个使用 Windows 7 的朋友尝试了包含该行代码的程序,并且发生了同样的事情。因此,这似乎是 Java 中的一个错误,至少有 Windows 7 和 Windows 8(对我来说运行 Java 7u10,对她来说是 6 或 7)。

根据提供的替代方案,我现在已经切换到使用带有 CSS 的 JLabel,因为它对于我的纯文本目的来说又快又脏(我知道它可以跨平台工作),但我可能会迁移到 JEditorPanes未来。

于 2013-01-14T02:02:53.727 回答