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 の高さが複数行で増加してもウィンドウのサイズが変更されず、ボタンが邪魔にならないためです。

ここに画像の説明を入力

私が間違っていることはありますか?2 つのプラットフォームでの Java Swing の動作は異なりますか? この問題を解決するにはどうすればよいですか?

4

1 に答える 1

5

問題は実際にはJTextAreaではないことを発見しましたが、プログラムの他の場所で次のコマンドを使用してWindows8のデフォルトのルックアンドフィールを設定したという事実

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

その行を削除し、デフォルトでMetal Look and Feelに設定すると(上部に投稿したスニペットの場合のように)、すべてが正しく表示されます。上記のメインメソッドのダイアログボックスがスクリーンショットの場合と同じように表示されないことに気付くまで、問題になる可能性はありませんでした。

Windows 7を使用している私の友人が、そのコード行を含めてプログラムを試したところ、同じことが起こりました。したがって、これは少なくともWindows7とWindows8を使用するJavaのバグのようです(私はJava 7u10を実行しており、彼女は6または7を実行しています)。

提供された代替案に従って、私は今のところCSSでJLabelを使用するように切り替えました。これは、プレーンテキストの目的ですばやく汚いためです(クロスプラットフォームで機能することはわかっています)が、JEditorPanesに移行する可能性があります。将来。

于 2013-01-14T02:02:53.727 に答える