Le rendu de swing semble cassé dans JDK 1.8, correct dans JDK 1.7

J’ai installé IntelliJ IDEA (13.1.1 # IC-135.480) et JDK 1.8.0 (x64) et j’ai généré une interface graphique avec le concepteur d’interface graphique.

Ensuite, j’ai couru le code et réalisé que quelque chose ne va pas.

Voici une capture d’écran de mon interface graphique: Buggy Rendering JDK 1.8.0

Le rendu de la police ne semble pas correct. De plus, le bouton perd son texte lorsque je passe la souris dessus.

J’ai donc installé JDK 1.7.0_40 (x64), recompilé le projet et l’ai exécuté à nouveau.

Le formulaire suivant apparaît lorsque j’utilise JDK 1.7: Rendu OK JDB 1.7.0_40

Le rendu semble être OK et le bouton est également OK.

J’ai donc installé les nouveaux pilotes Graphics et Chipset et bien plus encore, mais le problème persiste. Avez-vous déjà rencontré de tels problèmes avec les interfaces utilisateur Java Swing? Pourriez-vous m’aider à résoudre mes problèmes? Toute aide serait grandement appréciée.


METTRE À JOUR:

J’ai créé un petit projet avec seulement 1 JTextArea et 1 JButton et j’ai les mêmes problèmes de rendu.

Selon Andrew Thompson, j’ai changé le setSize () et je commence par EDT. L’exemple ci-dessous:

package at.maeh.java.client.simpleTextClient; import javax.swing.*; import java.awt.*; public class SimpleClient extends JFrame { private JPanel panel1; private JTextArea textArea1 = new JTextArea(); private JButton button1 = new JButton(); public SimpleClient() { super("SimpleClient"); // Panel panel1 = new JPanel(); panel1.setLayout(new FlowLayout()); // BUtton button1.setText("TestButton"); // TextArea textArea1.setColumns(40); textArea1.setRows(15); // Add Components panel1.add(textArea1); panel1.add(button1); // Add to Frame this.getContentPane().add(panel1); // pack and set Visible pack(); setVisible(true); System.out.println("Constructor EDT: " + SwingUtilities.isEventDispatchThread()); } public static void main(Ssortingng[] args) { SwingUtilities.invokeLater(SimpleClient::new); System.out.println("Main EDT: " + SwingUtilities.isEventDispatchThread()); } } 

Le résultat est un simple JFrame avec les composants.

Capture d’écran immédiatement après le démarrage”>

Lorsque j’écris du texte ou que je déplace mon mousePointer sur le bouton, les composants sont rendus comme ceci (Texte: testsentence.123; Button-Label: TestButton)

après avoir écrit - ou passer la souris

Pour ceux dont le problème n’a pas été résolu; essayez cette solution:

Définissez la variable d’environnement global “J2D_D3D” sur “false” dans le système d’exploitation. Selon Sun, ce paramètre est utilisé pour désactiver l’utilisation de Direct3D par le système Java 2D dans Java 1.4.1_02 et versions ultérieures.

C’est-à-dire: créer simplement une variable d’environnement nommée “J2D_D3D” et valoriser “false” sans les guillemets.

cela a résolu mes problèmes de rendu, j’espère que cela vous plaira aussi.

Finalement j’ai trouvé la solution à mon problème. J’ai dû modifier les parameters de contrôle de l’énergie de mon NVIDIA GeForce 620M pour obtenir des performances maximales.

Vous pouvez suivre ces étapes:

  1. Cliquez avec le bouton droit sur le bureau et cliquez sur Panneau de configuration NVIDIA.
  2. Sélectionnez “Gérer les parameters 3D” dans le volet gauche.
  3. Sélectionnez l’onglet “Paramètres du programme” dans la fenêtre principale.
  4. Cliquez sur ‘Ajouter’
  5. Accédez à votre dossier java (C: \ Program Files \ Java \ jre1.8.0_20 \ bin) et sélectionnez javaw.exe et appuyez sur ‘open’ (cette étape dépendra probablement de votre système d’exploitation mais devrait être assez facile à trouver)
  6. Où il est dit «Sélectionnez le processeur graphique préféré pour ce programme», cliquez sur le menu déroulant et choisissez «Processeur NVIDIA haute performance».
  7. Cliquez sur “Appliquer” en bas à droite et vous êtes prêt à partir.

J ai exactement le même problème. Ce que j’ai trouvé après ajustement de la qualité du duffys:

Mon Notebook utilise à la fois un Intel HD 4000 et un NVS 5200M. L’exécution d’applications Swing avec Java 7 convient aux deux cartes. Avec les interfaces graphiques Java 8 Swing rendues par la carte Intel (quels que soient les parameters de qualité), elles semblent émiettées (comme dans la capture d’écran duffys), en utilisant le NVS 5200M comme elles le faisaient auparavant.

Impossible de trouver quoi que ce soit sur le tracker de bogues Java, par contre il est difficile de décrire ce bogue.

 textArea1.setSize(500, 300); 

Il ya un problème. Les interfaces graphiques Java peuvent devoir fonctionner sur un certain nombre de plates-formes, sur différentes résolutions d’écran et en utilisant différents PLAF. En tant que tels, ils ne sont pas propices au placement ou au dimensionnement exact des composants. Pour organiser les composants d’une interface graphique robuste, utilisez plutôt des gestionnaires de disposition, ou des combinaisons de ceux-ci 1 , ainsi que le remplissage de la mise en page et les bordures pour les espaces blancs 2 .

Dell Vostro 5480 avec Ubuntu Mate 16.04 J’ai eu un problème similaire. Il est possible de changer le pilote Nvidia en utilisant un pilote supplémentaire.

entrer la description de l'image ici

Et sélectionnez le profil NVidia. entrer la description de l'image ici

Correctif similaire à duffy356:

Les Lenovo T430 exécutant Windows 7 64 bits avec NVIDIA NVS 5200M et HD 4000. Mise à jour vers Java 8 La mise à jour 5 a créé des graphiques et des boutons endommagés pour deux applications Swing, jEdit et Freemind.

L’utilisation de l’applet du panneau de configuration NVIDIA pour modifier les parameters globaux du mode de gestion de l’alimentation pour «Préférer les performances maximales» semble avoir résolu ce problème.

Vous ne savez pas s’il existe un problème persistant avec la façon dont les applications définissent les tailles.

pas:

  1. Panneau de contrôle
  2. système et sécurité
  3. système
  4. Paramètres distants
  5. Onglet Avancé
  6. cliquez sur variables d’environnement
  7. créer une variable J2D_D3D
  8. et définissez la valeur sur false.

travaillé pour moi, ….