Comment puis-je la force/de commencer à utiliser un GTKLookAndFeel en Java sur KDE?
Tout d'abord, à l'aide de gnome n'est pas une option, mais il est possible d'installer ses bibliothèques).
J'ai besoin de savoir ce qui est nécessaire pour afficher une Java Swing application de bureau à l'aide de l'actuelle installé KDE regard et la sensation de KDE. Idéalement, la solution devrait me permettre d'appliquer un look qui ressemble à du sous-jacent système de fenêtrage (ie: Windows LNF pour Windows, GTK LNF pour Gnome(GTK), QT LNF pour KDE (QT), la valeur par défaut pour les autres plates-formes).
Sous KDE, vous pouvez le configurer pour utiliser le courant de KDE thème pour les applications GTK, trop. Donc, si la solution fonctionne avec GTK c'est très bien.
Quand je lance le morceau de code suivant sous Gnome (Ubuntu 8.04), l'application Java est très beau. Il s'intègre très bien avec le reste des applications:
try {
//Set System L&F
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) { //Handle it }
Toutefois, si j'exécute la même chose sous Debian (Lenny) avec KDE, l'UIManager.getSystemLookAndFeelClassName() qui renvoie le Java par défaut.
Si je vais de l'avant et de le forcer à utiliser GTK LNF, l'application ne fonctionne pas. Certains champs sont invisibles, d'autres deviennent hors de l'endroit, 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 laisse l'utilisateur choisir n'importe quel un seul de la LNF et puis essaie de la définir. Le métal et le Motif de fonctionner correctement. GTK n'est pas. Le curseur est vraiment foiré. La zone de liste semble laid et disparaît, mais semble fonctionner. Les boutons et les menus semblent ok. Le code 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) Quel est manquant à partir de l'environnement de Java GTK LNF demande de travail sous KDE?
2) Quelle est la JVM vérifie le retour de GTK par défaut dans le système de thème?
Merci pour votre aide
Luis Fernando
PS->j'ai essayé d'autres solutions,comme la JGoodies, plaine AWT et SWT. Cependant, le Swing avec GTK LNF serait la meilleure solution pour éviter les tracas de la SWT bibliothèques natives et JGoodies supplémentaire pots (aussi, JGoodies de la LNF n'a pas l'air intégrées Swing GTK sous Gnome). AWT semble hideux (le motif) et qui manque beaucoup de fonctionnalités.
OriginalL'auteur Luis Soeiro | 2008-10-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir l'apparence et la sensation de la ligne de commande:
java -Dswing.defaultlaf=com.soleil.java.swing.plaf.gtk.GTKLookAndFeel MyApp
Aussi, SwingSet2.jnlp fournit un exemple de démonstration de toutes les différentes choses qui peuvent être changées. La source et d'autres informations peuvent être trouvées ici: texte du lien
Je parie que si l'SwingSet2 ne fonctionne pas, alors il serait un bug ou quelque chose qui manque.
OriginalL'auteur Joshua
peut-être cela fonctionne:
Merci, fonctionne pour moi -- cependant GTK dans Swing est encore plus laid que par défaut Swing. Difficile à croire ;-/.
OriginalL'auteur Marcus Tik
Citant la documentation:
Mais je suis sûr à 99% que votre problème est celui-ci (en citant les docs de nouveau):
Si vous ne voulez pas d'invoquer
updateUI
sur tous lesJComponents
, assurez-vous d'invoquerUIManager.setLookAndFeel
avant tout autre code swing.OriginalL'auteur Davide
GTK Laf est, à mon humble avis, cassé période. Il ne pas l'honneur de certains paramètres aléatoires. Je crois qu'il n'est pas censé honorer tout setBackground(), setForeground(), ou setFont() sur la plupart des composants.
Si vous utilisez java >1.4.2 je suggère d'utiliser MetalLookAndFeel [devraient être UIManager.getCrossPlatformLookAndFeelClassname()]. Si vous êtes à l'aide de >1.6.0_u10 vous pouvez essayer NautilusLookAndFeel. Personnellement, je trouve Métal plus agréable à la recherche.
OriginalL'auteur KitsuneYMG