Faire pivoter un Swing JLabel
Je suis en train d'essayer de mettre en œuvre un composant Swing, héritant de JLabel
qui devrait représenter simplement une étiquette qui peut être orienté verticalement.
À partir de cette:
public class RotatedLabel extends JLabel {
public enum Direction {
HORIZONTAL,
VERTICAL_UP,
VERTICAL_DOWN
}
private Direction direction;
Je pensais que c'est une bonne idée de simplement modifier les résultats de getPreferredSize()
:
@Override
public Dimension getPreferredSize() {
//swap size for vertical alignments
switch (getDirection()) {
case VERTICAL_UP:
case VERTICAL_DOWN:
return new Dimension(super.getPreferredSize().height, super
.getPreferredSize().width);
default:
return super.getPreferredSize();
}
}
et puis il suffit de transformer le Graphics
objet avant de me décharger de la peinture à l'original JLabel
:
@Override
protected void paintComponent(Graphics g) {
Graphics2D gr = (Graphics2D) g.create();
switch (getDirection()) {
case VERTICAL_UP:
gr.translate(0, getPreferredSize().getHeight());
gr.transform(AffineTransform.getQuadrantRotateInstance(-1));
break;
case VERTICAL_DOWN:
//TODO
break;
default:
}
super.paintComponent(gr);
}
Il semble fonctionner—en quelque sorte—que le texte est maintenant affichée verticalement. Toutefois, le placement et la taille sont éteints.
En fait, la largeur de l'arrière-plan (en orange dans ce cas) est identique à la hauteur de l'entourage JFrame
qui est ... pas tout à fait ce que j'avais à l'esprit.
Toutes les idées sur la façon de le résoudre de manière adéquate? Délègue, le rendu des superclasses même encouragé?
gr.translate0, getPreferredSize().getHeight());
OriginalL'auteur Joey | 2009-03-06
Vous devez vous connecter pour publier un commentaire.
Je l'ai eu à travailler avec un peu d'aide d'un collègue de travail. Fondamentalement, j'ai maintenant un champ qui indique si le swap hauteur/largeur qui n'est active que pour le temps où l'original
JLabel
ne sa peinture.Voir hypftier.de/dump/RotatedLabel.java – la licence mentionnée est une jolie libéral, qui s'inspire de la BSD (bien que le texte de la licence est disponible uniquement en allemand pour l'instant).
OriginalL'auteur Joey
Je ne sais pas si c'est pertinent,
Mais alors que la recherche de la même chose, j'ai trouvé une très bonne mise en œuvre dans le web,
http://macdevcenter.com/pub/a/mac/2002/03/22/vertical_text.html
Check it out, c'est une mise en œuvre au cours de la TabbedPane avec le texte vertical,
Voir si c'suites vous fins.
OriginalL'auteur Demi Ben-Ari
J'ai eu un jeu avec cela, il ne fonctionnait pas très bien au début, parce que l'étiquette limites ont été exactement carré et causé des composants à la droite de l'étiquette de changer et de s'assombrir. Mais j'ai alors réalisé que c'était parce que je suis en utilisant JGoodies FormLayout. Si vous utilisez le gestionnaire de configuration, assurez-vous de définir la taille de la colonne "préféré" pas "par défaut". HTH.
OriginalL'auteur Matthew Wise
Je pense que c'est parce que vous avez à traduire sur le mauvais point.
la taille de l'objet dépend de ce récipient que vous avez cela, donc, même si votre taille préférée pourrait être ce que vous voulez, à votre taille réelle, n'est-ce pas?
si vous avez cette étiquette au CENTRE d'un BorderLayout, la taille est toujours la pleine taille de récipient (moins nord+sud de la hauteur, du moins à l'est+ouest largeur)
afin de ne pas vous d'avoir à traduire sur la taille réelle, pas la taille préférée?
OriginalL'auteur John Gardner