J'ai une classe personnalisée qui étend JLabel. Pour les instances spécifiques de cette classe, je veux ajouter un peu d'espace au texte sur le côté gauche. J'ai besoin de l'espacement lorsque je place l'arrière-plan de ce JLabel et je ne veux pas que le texte corresponde juste à côté du bord de l'arrière-plan coloré. Je pêchais autour d'un peu et mis en œuvre ce (dans la fonction de peinture):Méthode setBorder pour JLabel provoquant un problème de peinture
if (condition) {
bgColor = Color.red;
setBackground(bgColor);
setOpaque(true);
// This line merely adds some padding on the left
setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
}
else {
setOpaque(false);
}
Cela semble fonctionner en ce qu'elle ajoute l'espacement que je veux, mais il a un effet secondaire malheureux en ce qu'il semble briser la repeindre tout le reste de l'application ... il semble que seul ce composant particulier est repeindre et pas le reste de l'application. J'ai finalement suivi jusqu'à l'appel de setBorder spécifiquement ... la mise en place de tout type de frontière semble provoquer le même comportement brisé. Nous avons deux versions différentes de notre application, une qui s'exécute en Java 1.5 et une qui s'exécute en Java 1.6, la version Java 1.6 semble fonctionner correctement tandis que la version Java 1.5 ne fonctionne pas. Il n'est pas possible de mettre à jour l'ancienne version vers Java 1.6 ... J'ai besoin de quelque chose qui fonctionnera dans Java 1.5. En outre, j'ai essayé ceci (juste pour voir à quoi il ressemblait):
setHorizontalTextPosition(JLabel.CENTER);
Et qui semble aussi briser le repeindre exactement de la même manière. J'ai regardé à travers la source de notre application et trouvé d'autres endroits où nous avons défini des bordures (y compris des bordures vides), mais nous n'avons pas pu en trouver sur JLabels (seulement des panneaux, des boutons, etc.). Quelqu'un a-t-il déjà vu quelque chose comme ça? Savoir comment le réparer? Ou peut-être une autre façon d'obtenir l'espacement dont j'ai besoin qui peut contourner le bug? Merci.
D'où appelez-vous ce code? Si c'est dans le constructeur, tout devrait bien se passer ... si c'est à partir de paintComponent() ou quelque chose comme ça, vous pourriez rencontrer le genre de problème que vous décrivez. –