sur la plupart des systèmes, le contenu de mon jlabel montre juste bien. Il est également résidé de manière à ce qu'il soit toujours assez gros pour montrer son texte de contenu parce que je fais essentiellement cela: mais sur certains systèmes (pas le mien alors je ne peux pas vraiment le déboguer C'est facile), il coupe le texte et montre "..." à la fin. p> Vous pouvez voir le code complet ici et vous pouvez voir l'exemple ici (Abbildungen_bijektiv_x3) . P> J'ai aussi un cas similaire pour JBUTON. P > Comment puis-je forcer la balançoire à ne pas faire ça? (Même si cela pense que le composant est trop petit.) P> Où se passe-t-il exactement la poignée? J'ai parcouru le code de jbutton code> et certaines classes associées, mais je n'ai pas vraiment trouvé le code où il coupe le texte et ajoute les ellipsis. P> p>
3 Réponses :
Vous pouvez utiliser une apparence de plate-forme transversale (comme Nimbus) pour arrêter cela sur ce point de vue p>
Utilisez uimanager.setlookandfeel (...) code> et sélectionnez l'une des implémentations de l'apparence fournies et des implémentations à sensation (Metallookandfeel devrait être une plate-forme croix durablement).
Ou utiliser uimanager.setlookandfeel (uimanager.getcrossplatformLookandfe elclassname ()); code>
@THOMAS: Il semble que cela désactive la police anti-aliased. Puis-je éviter ça?
Je ne suis pas sûr, mais la LAF pourrait ne pas prendre en charge les polices anti-aliased (quelle version JRE utilisez-vous BTW?). Cependant, vous pouvez essayer de télécharger une autre LAF (look ici par exemple.)
@THOMAS: J'utilise Java 1.6.0. Et je pense que j'ai trouvé un bon moyen de contourner la question anti-aliasing. Je vais ajouter des informations ici à propos de ce.
Il ne devrait pas y avoir de besoin de définir les limites de l'étiquette.
C'est le travail d'un gestionnaire de mise en page. Apprenez à utiliser des gestionnaires de mise en page et vous n'aurez pas ce problème. P>
EDIT: P>
Les gestionnaires de layout utilisent: p>
label.setSize( label.getPreferredSize() );
Pourquoi? Postez votre SSCCE qui démontre le problème. J'espère que vous ne vous attendez pas à ce que nous lisions à 1 000 lignes de code pour essayer de comprendre ce que vous essayez de faire.
Il est conçu de telle manière que je dois construire moi-même la mise en page. Et je ne veux pas non plus discuter ici maintenant que je devrais complètement repenser le tout à partir de zéro. En outre, où est le problème du tout? Faire / calcul de la mise en page est une tâche assez triviale. Seulement parce que Java essaie de se comporter d'une manière d'une certaine manière intelligente le rend problématique ici. Et je demande seulement comment je peux désactiver cela.
Ah, que getpreferredsize () code> semble être un moyen simple et propre pour un
jlabel code> pour obtenir la taille réelle où elle va toujours s'adapter. Dans le cas du
jbutton code>, je veux avoir une taille prédéfinie et je suis tout à fait sûr que mon texte devrait y tenir là, mais cela fait toujours "...". Comment puis-je le forcer à ne pas faire ça?
Savez-vous où il fait en réalité la manipulation des ellipses dans le code? C'est à dire. Dans quelle classe? Parce que je pourrais voir comment je pourrais la désactiver.
"Tout est conçu de manière à construire moi-même la mise en page moi-même." Le fait est tout le point d'un gestionnaire de mise en page. Vous mettez le code de mise en page spécial dans la mise en page Mananger. Vous réinventez la roue. Les boutons sont plus compliqués que les étiquettes parce qu'ils ont des frontières. Vous oubliez probablement de le laisser.
La disposition est vraiment triviale dans mon cas. Quoi qu'il en soit, cela est hors-thème au problème lui-même.
Utilisez donc un gestionnaire de mise en page et ne réinventez pas la roue. Vous écrivez un code personnalisé pour former un composant et cela ne fonctionne pas comme vous vous attendez donc à la question de savoir pourquoi vous remplacez le code par défaut. Si vous utilisez correctement le gestionnaire de mise en page, vous n'auriez pas ce problème. Donc non, ce n'est pas hors sujet.
Le dimensionnement / la mise en page fonctionne exactement i> la façon dont je le veux. Vraiment le seul problème que j'ai, c'est qu'il ajoute les ellipsis.
Je fais cela maintenant (pour les boutons, mais vous pouvez le faire de la même manière que d'autres contrôles):
static public class ButtonUI extends MetalButtonUI { public static ComponentUI createUI(JComponent c) { return new ButtonUI(); } @Override public void paint(Graphics g, JComponent c) { JSimpleLabel.activateAntiAliasing(g); AbstractButton b = (AbstractButton) c; ButtonModel model = b.getModel(); String text = b.getText(); clearTextShiftOffset(); // perform UI specific press action, e.g. Windows L&F shifts text if (model.isArmed() && model.isPressed()) { paintButtonPressed(g,b); } FontMetrics metrics = g.getFontMetrics(); Rectangle2D stringBounds = metrics.getStringBounds(text, g); g.drawString(text, (b.getWidth() - (int)stringBounds.getWidth()) / 2, metrics.getLeading() + metrics.getMaxAscent() + (b.getHeight() - (int)stringBounds.getHeight()) / 2); if (b.isFocusPainted() && b.hasFocus()) { Rectangle viewRect = new Rectangle(); final int inset = 1; viewRect.x = inset; viewRect.y = inset; viewRect.width = b.getWidth() - (inset + viewRect.x) - 1; viewRect.height = b.getHeight() - (inset + viewRect.y) - 1; g.setColor(getFocusColor()); g.drawRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height); } } } public void init() { try { UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel() { private static final long serialVersionUID = 1L; @Override public UIDefaults getDefaults() { UIDefaults table = super.getDefaults(); table.put("ButtonUI", ButtonUI.class.getName()); return table; } }); } catch (Exception e) { e.printStackTrace(); } // ... }
Pourriez-vous ajouter une autre information sur où est l'astuce qui a atteint ce que vous vouliez?
@Matthieu: En écrasant le look et la sensation, je peux gérer le dessin texte moi-même et appeler g.Drawstring code> n'ajoutera pas d'ellipsis (qui est traitée ailleurs par le look standard - et -ressentir).
Cette solution dépend de l'utilisation de métal (ce qui signifie que vous êtes coincé avec elle), ainsi que des tailles de police, une configuration de la mise en page, une configuration de mise en page, etc. Ce ne sera pas un problème tant que l'un de ces changements, le bouton aura l'air faux, ou le texte peut renverser au-delà de la bordure du bouton. Une meilleure solution consisterait à ajuster les paramètres de mise en page du bouton dans le JPanel où il vit.
@Toolforger: Si vous connaissez une meilleure solution, postez-le comme une réponse séparée?
Je ne sais pas comment écrire une bonne réponse. Je devrais aller par beaucoup d'hypothèses WRT. Quel LayoutAutManager est le bon pour le lecteur, et ce serait faux dans au moins 50% des cas. Couvrant tous les layoutManagers possibles deviendrait un essai de 5 pages et je n'ai pas le temps pour cela.
Au fait: le "..." s'appelle un ellipsis .