まず、gnome を使用することはできません (ただし、そのライブラリをインストールすることは可能です)。
現在インストールされている KDE の KDE ルック アンド フィールを使用して Java Swing デスクトップ アプリケーションを表示するには、何が必要かを知る必要があります。理想的には、ソリューションによって、基盤となるウィンドウ システムのようなルック アンド フィールを適用できるようにする必要があります (つまり、Windows 用の Windows LNF、Gnome (GTK) 用の GTK LNF、KDE (QT) 用の QT LNF、他のプラットフォーム用のデフォルトのもの)。 )。
KDE では、GTK アプリケーションにも現在の KDE テーマを使用するように構成できます。そのため、ソリューションが GTK で動作する場合は問題ありません。
Gnome (Ubuntu 8.04) で次のコードを実行すると、Java アプリケーションが美しく見えます。他のアプリケーションと非常によく統合されます。
try {
// Set System L&F
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) { //Handle it }
ただし、KDE を使用して Debian (Lenny) で同じことを実行すると、UIManager.getSystemLookAndFeelClassName() 呼び出しは Java のデフォルトのものを返します。GTK LNF の使用を強制すると、アプリケーションは機能しません。一部のフィールドは非表示になり、他のフィールドは場違いになり、すべてが使用できなくなります。
try {
//Force the GTK LNF on top of KDE, but **it doesn't work**
UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
} catch (Exception e) { /*Handle it*/ }
また、次のコードを配置しようとしました。ユーザーは利用可能な LNF のいずれかを選択し、それを設定しようとします。金属とモチーフはうまく機能します。GTK はそうではありません。スライダーは本当にめちゃくちゃです。リスト ボックスは見た目が悪く、消えますが、機能しているようです。ボタンとメニューは問題ないようです。関連するコードを次に示します。
(...)
/** Creates new form SwingFrame */
public SwingFrame() {
initComponents();
//Save all available lafs in a combobox
cbLafs.removeAllItems();
UIManager.LookAndFeelInfo[] lafs=UIManager.getInstalledLookAndFeels();
for (int i=0,t=lafs.length;i<t;i++)
{
cbLafs.addItem(lafs[i]);
System.out.println(lafs[i].getName());
}
}
public void changeLookAndFeel(String laf)
{
//If not specified, get the default one
if (laf==null) {
laf=UIManager.getSystemLookAndFeelClassName();
}
try {
// Set System L&F
UIManager.setLookAndFeel(laf);
}
catch (Exception e) {
// handle exception
e.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(this);
}
private void cbLafsActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
UIManager.LookAndFeelInfo laf=(UIManager.LookAndFeelInfo)cbLafs.getSelectedItem();
if (laf==null)
changeLookAndFeel(null);
else
changeLookAndFeel(laf.getClassName());
}
この同じシステムでは、すべての GTK アプリケーション (例: Firefox) が期待どおりに動作しています。そう:
1) KDE の下で Java GTK LNF アプリケーションを動作させる環境に欠けているものは何ですか?
2) デフォルトのシステムテーマとして GTK を返すために、JVM は何をチェックしますか?
ルイス・フェルナンドを助けてくれてありがとう
PS->JGoodies、プレーンAWT、SWTなど、他のソリューションも試しました。ただし、GTK LNF を使用した Swing は、SWT ネイティブ ライブラリと JGoodies の追加の jar の煩わしさを回避するための最良のソリューションです (また、JGoodies LNF は、Gnome での Swing GTK ほど統合されていないように見えます)。AWT はおぞましく (モチーフのように) 見え、多くの機能が欠けています。