Tout d'abord, l'utilisation de gnome n'est pas une option (mais il est possible d'installer ses bibliothèques).Comment forcer/utiliser GTKLookAndFeel en Java sur KDE?
J'ai besoin de savoir ce qui est nécessaire pour afficher une application de bureau Java Swing en utilisant l'apparence et la convivialité KDE de KDE. Idéalement, la solution devrait me permettre d'appliquer un aspect qui ressemble au système de fenêtrage sous-jacent (Windows LNF pour Windows, GTK LNF pour Gnome (GTK), QT LNF pour KDE (QT), celui par défaut pour les autres plateformes). Sous KDE, vous pouvez le configurer pour qu'il utilise également le thème KDE actuel pour les applications GTK. Donc, si la solution fonctionne avec GTK, c'est bien.
Lorsque j'exécute le morceau de code suivant sous Gnome (Ubuntu 8.04), l'application Java est belle. Il intègre très bien avec le reste des applications:
try {
// Set System L&F
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) { //Handle it }
Cependant, si je lance la même chose sous Debian (Lenny) avec KDE, l'appel UIManager.getSystemLookAndFeelClassName() retourne la valeur par défaut de Java un. Si je vais de l'avant et l'oblige à utiliser le GTK LNF, l'application ne fonctionne pas. Certains champs sont invisibles, d'autres deviennent hors de propos, tout est inutilisable:
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*/ }
J'ai aussi essayé de mettre le code suivant. Il permet à l'utilisateur de choisir l'un des LNF disponibles, puis essaie de le définir. Le métal et le motif fonctionnent bien. GTK ne le fait pas. Le curseur est vraiment foiré. La zone de liste semble moche et disparaît, mais semble fonctionner. Les boutons et le menu semblent ok. Le code correspondant est indiqué ici:
(...)
/** 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());
}
Ce même système a toutes les applications GTK de travail (par exemple: Firefox) comme prévu. Donc:
1) Qu'est-ce qui manque à l'environnement pour qu'une application Java GTK LNF fonctionne sous KDE?
2) Que vérifie JVM pour retourner GTK comme thème système par défaut?
Merci pour vous aider à Luis Fernando
PS-> J'ai essayé d'autres solutions, aussi, comme JGoodies, AWT plaine et SWT. Cependant, Swing avec GTK LNF serait la meilleure solution pour éviter les tracasseries des bibliothèques natives SWT et des pots supplémentaires JGoodies (de plus, JGoodies LNF ne semble pas aussi intégré que Swing GTK sous Gnome). AWT semble hideux (ressemblant à un motif) et manque beaucoup de fonctionnalités.
Salut J'ai essayé cette première option. D'une manière ou d'une autre, tous les widgets sont vraiment en désordre (tailles erronées, éléments manquants, positions incorrectes et certains n'apparaissent même pas). En dehors de Java, toutes les applications GTK fonctionnent bien et utilisent également le thème KDE actuel. Je pourrais obtenir ce code pour fonctionner seulement sur Ubuntu (Gnome). –
Merci, ça marche pour moi - mais GTK dans Swing est encore plus laide que Swing par défaut. Difficile à croire ;-/. – greenoldman