同じSwingアプリケーションで2つの異なるルックアンドフィールを使用できますか?
-
22-07-2019 - |
質問
FlamingoリボンとSubstance Office 2007のルックアンドフィールを使用しています。
もちろん、すべてのコントロールには、ダイアログボックスのコントロールを含め、このルックアンドフィールがあります。
私が欲しいのは、Office 2007のようなものです。リボンはOffice 2007の外観を持ちますが、他のコントロールはネイティブのVista / XPの外観を維持します。
特定のコントロールに異なるルックアンドフィールを割り当てることは可能ですか?おそらく、何らかのチェーンまたはプロキシのルックアンドフィールを使用していますか?
解決
発見したばかり: Substance 5.0 以降 SKIN_PROPERTY が利用可能です。
異なるスキンを異なる JRootPanes
(つまり、 JDialog
、 JFrame
、 JInternalFrame
)に割り当てることができます
ちょっとしたトリック: JInternalFrame
をオーバーライドして、余分な境界線とタイトルペインを削除し、境界線のないパネルのようにします。そうすれば、フォーム/ダイアログのさまざまな部分の外観が異なるという印象を与えることができます。
他のヒント
これは、ルックアンドフィールを自動的に変更するライブラリです。これがすべてのコンポーネントに対して異なる方法で行われるかどうかはわかりませんが、見てください。 pbjar.org
この本は、ルックアンドフィールの詳細を知りたい場合に役立ちます / java-look-and-feel-design-guidelines-second-edition
誰かがそれを書くことができたら、気軽に始めてください。いくつかのコード例を見てうれしいです。
編集:
このフォーラムスレッドスレッドで次のことがわかりました説明
SwingはLook&を使用しますフィール(PLAF)。 PLAFはJFrameごとに添付されません レベル。それらはVMごとに接続されます レベル。混ぜることはほとんど不可能です 1つのアプリケーション内のPLAF。私は持っています いくつかの試みを見ましたが、すべて失敗しました。
残念ながら、Swingは多くの「擬似グローバル」を行います。背後にあるもの。知る限り、一貫してそれを行う唯一の方法は、プライベート AppContext
APIを使用することです。各 AppContext
には、独自のイベントディスパッチスレッドと他の" psuedo-globals"があります。