Java アプリケーションでSubstance L&F ライブラリを使用したいので、.jar ファイルをダウンロードしてプロジェクトのクラスパスに追加しました。main()
次に、アプリケーションの関数で L&F を次のように設定します。
SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run()
{
try
{
// Substance
String skin = "org.pushingpixels.substance.api.skin.SubstanceGraphiteAquaLookAndFeel";
SubstanceLookAndFeel.setSkin(skin);
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
}
catch(Exception e)
{
System.err.println("Can't initialize specified look&feel");
e.printStackTrace();
}
}
});
これは、JFrame が作成される前に行われます。ただし、例外がスローされなくても何も起こらず、GUI はデフォルトの Swing L&F でレンダリングされます。
私がここで見逃しているアイデアはありますか?
編集
呼び出し
の代わりに、代わりSubstanceLookAndFeel.setSkin(skin);
に試しましUIManager.setLookAndFeel(skin);
た。これはまだ機能しませんが、少なくとも今は例外が発生します:
org.pushingpixels.substance.api.UiThreadingViolationException:
イベント ディスパッチ スレッドで状態追跡を行う必要があります
これを経由で呼び出すことで解決しませんinvokeAndWait()
か?
EDIT-2
わかりました。問題は別のものでした。JTable
L&F の設定時ではなく、の作成時に例外がスローされました。を介してコンストラクターを呼び出すことでJFrame
(基本的にアプリケーション全体を実行します) 、L&F が正しくレンダリングされるようになりましたEventQueue.invokeLater()
。しかし、私は以前にそれをしたことがありません.そのようにするのは「保存」(Java用語で有効)ですか?