最高品質のLAFライブラリの1つはサブスタンスです。 よく描かれた標準コンポーネントと12を超えるスキンが含まれています。
Substanceを使用して、ユーザースキンを選択する機能をアプリケーションに追加する方法を検討してください。
接続物質
-アプリケーションの起動時に次のようにSubstanceを初期化する必要があります。
SubstanceLookAndFeel laf = new SubstanceGeminiLookAndFeel(); UIManager.setLookAndFeel(laf);
-コードを使用してウィンドウのシステム装飾を無効にする必要があります
JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true);
-Substanceを有効にして、インストールされているトピックのリストをシステムウィンドウメニューに表示する必要があります。
UIManager.put(SubstanceLookAndFeel.SHOW_EXTRA_WIDGETS, Boolean.TRUE);
その結果、実行中のアプリケーションで、ユーザーはウィンドウアイコンをクリックして、リストからテーマを選択できます。
設定保存
setSkinメソッドを使用して、テーマクラスの名前でサブスタンススキンを設定できます。 SubstanceLookAndFeel.getCurrentSkin()。GetClass()。GetCanonicalName()を呼び出すことで、現在のトピックのクラス名を取得できます。 アプリケーションの最後でこの情報をファイルに保存するだけです。
保存するには、標準のPropertiesクラスを使用できます。設定ファイルはユーザーのホームディレクトリに配置できます。また、シャットダウン時にフックに保存機能を追加して、アプリケーションの終了時に自動的に呼び出されるようにすることをお勧めします。
その結果、次のタイプのファイルがホームフォルダーに保存されます。
完全なスキンサポートコード
package insubstantial; import javax.swing.*; import java.awt.*; import org.pushingpixels.substance.api.*; import org.pushingpixels.substance.api.skin.*; import java.util.*; import java.io.*; public class Insubstantial { public static void setupSubstance() { try { final String fileName = System.getProperty("user.home") + System.getProperty("file.separator") + "insubstantial.txt"; final Properties properties = new Properties(); org.pushingpixels.substance.api.SubstanceLookAndFeel laf = new SubstanceGeminiLookAndFeel(); UIManager.setLookAndFeel(laf); UIManager.put(SubstanceLookAndFeel.SHOW_EXTRA_WIDGETS, Boolean.TRUE); JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { try { String skinClassName = SubstanceLookAndFeel.getCurrentSkin().getClass().getCanonicalName(); properties.setProperty("skinClassName", skinClassName); properties.store(new FileOutputStream(fileName), fileName); } catch (Throwable t) { t.printStackTrace(); } } }); properties.load(new FileInputStream(fileName)); String skinClassName = properties.getProperty("skinClassName"); laf.setSkin(skinClassName); } catch (Throwable t) { t.printStackTrace(); } } public static void main(String[] args) { setupSubstance(); EventQueue.invokeLater(new Runnable() { @Override public void run() { new TestGUI().setVisible(true); } }); } }
ご覧のとおり、コードは最小限であり、実際にアプリケーションを変更する必要はありません。
サブスタンスライブラリとソースコードを含むコンパイル済みのサンプルは、 こちらからダウンロードできます 。
サブスタンスおよびすべての関連ライブラリのソースコードは、 ここからダウンロードできます 。
オプショナル
ユーザーが自分でスキンを選択できるようにする必要があるのはなぜですか?
-忠誠心を高めるため。 通常、「自分用に」何かをカスタマイズする機会があるとき、人々はそれを好む
インターフェイスは「ネイティブ」に見える必要がありますか?
-慣性でそう言う。 たとえば、Microsoft Officeでは、各バージョンで独自のテーマがシステムウィンドウと一致しません。