有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JOptionPane中的java JTextArea在Mac OS X和Windows 8中具有不同的大小

我喜欢JOptionPane的便利性,但不喜欢它不包装文本的事实。所以我决定实现this question的答案如下:

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上运行良好:

enter image description here

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

enter image description here

我做错什么了吗?Java Swing在这两种平台上的表现是否不同?我如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

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

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    

    删除这一行并默认为金属外观(就像我在顶部发布的代码片段中所做的那样),可以让一切看起来都正常。我甚至没有想到这可能是个问题,直到我意识到上面的主方法中的对话框与我的屏幕截图中的不一样

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

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