IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JButton] Ecrire verticalement


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Par défaut [JButton] Ecrire verticalement
    Voilà je m'explique, j'aurai besoin pour une application de pouvoir écrire verticalement dans un JButton ( pour une histoire de lisibilité qui ne nous intéresse pas ici ) .

    Jusqu'ici la seule solution que j'ai trouvée, c'est d'utiliser la classe VTextIcon.
    Voilà le lien pour ceux qui veulent disséquer la classe :

    http://www.macdevcenter.com/mac/2002...VTextIcon.java

    Cette classe est plutôt sympa puisqu'elle permet de transformer le texte d'un JButton ( par exemple ) en un Icon, puis de mettre cette Icon dans ce même JButton, ainsi, même si ce n'est pas réellement le texte, mais une image du texte qui est vertical, on a le résultat souhaité.

    Mon problème vient du fait que je voudrais pouvoir écrire du texte sur plusieurs lignes. Vous mes direz qu'il suffit d'utiliser des balises HTML pour le texte, un petit coup de <br /> et hop c'est réglé.

    Bin non , malheureusement, cette classe prend le texte de façon brute, alors on se retrouve avec des balises HTML apparentes, mais toujours sur une seule ligne.

    J'ai entamé la lecture de la classe, manière de détecter où se situe le passage du texte en un Icon, pour voir si on pouvait modifier quelque chose. Pour l'instant je me casse les dents sur la méthode paintIcon, si il y en a qui souhaitent me rejoindre...

    J'avais eu une autre idée, beaucoup moins classe, afin d'en finir avec ça.
    Faire un JButton normal (horizontal), avec le nombre de lignes voulues, le transformer en une image et mettre cette image en fond ( en gros le même principe que ce que fait cette classe, mais en moins casse pied ).
    Le problème c'est que quand j'utilise ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BufferedImage image = new BufferedImage ( myButton.getWidth(), myButton.getHeight(), BufferedImage.TYPE_INT_RGB);
     
    	Graphics2D g2d = image.createGraphics();
    	myButton.paint(g2d);
    	g2d.dispose();
     
    	try {
    		ImageIO.write(image, "jpeg", destination);
    	} catch (IOException e) {      
    		e.printStackTrace();
    	}
    J'ai un plantage java.lang.IllegalArgumentException parce que soit disant j'aurai essayé de créer une image avec width=0 et height=0 ;

    Voilà, je pense, mal grès le pavé que j'ai écrit ( et je m'en excuse ) que vous avez compris ce que je cherche à faire.
    Et je pense que si on trouve une solution on en fera bénéficier plus d'un !

  2. #2
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    J'ai trouvé cet exemple sur le net, mais ça a pas l'air folichon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class Test {
        public static void main(String[] args) {
            UIManager.put("Button.font", new Font("monospaced", Font.PLAIN, 12));
     
            JFrame f = new JFrame("Example");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container cp = f.getContentPane();
            cp.add(new JButton(tovertical("Clowns to the left")), BorderLayout.WEST);
            cp.add(new JButton(tovertical("Jokers to the right")), BorderLayout.EAST);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
     
        static String tovertical(String s) {
            StringBuffer b = new StringBuffer("<HTML>");
            for(int i=0; i<s.length(); ++i)
                b.append(s.charAt(i)).append("<BR>");
            return b.append("</HTML>").toString();
     
        }
    }
    J'ai beaucoup mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    JButton jbutton = new JButton("Jokers to the right");
    AffineTransform at = jbutton.getFont().getTransform();
    at.rotate(Math.PI/2);
    Font font = jbutton.getFont().deriveFont(at);
    jbutton.setFont(font);

  3. #3
    Membre confirmé Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Par défaut
    Merci, je viens de les tester.
    Le problème c'est qu'avec le premier morceau de code j'écris comme ça :
    C
    l
    o
    w
    n
    s

    t
    o

    t
    h
    e

    l
    e
    f
    t

    mais toujours en horizontal, et avec le deuxième bin c'est comme si je mettait pas les 4 dernières lignes...

    C'est à n'y rien comprendre.

  4. #4
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public class Test {
        public static void main(String[] args) throws Exception {
        	UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
     
            JFrame f = new JFrame("Example");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container cp = f.getContentPane();
            cp.add(new JButton(tovertical("Clowns to the left")), BorderLayout.WEST);
     
            JButton jbutton = new JButton("Jokers to the right");
            AffineTransform at = jbutton.getFont().getTransform();
            at.rotate(Math.PI/2);
            Font font = jbutton.getFont().deriveFont(at);
            jbutton.setFont(font);
            cp.add(jbutton, BorderLayout.EAST);
     
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
     
        static String tovertical(String s) {
            StringBuffer b = new StringBuffer("<HTML>");
            for(int i=0; i<s.length(); ++i)
                b.append(s.charAt(i)).append("<BR>");
            return b.append("</HTML>").toString();
     
        }
    }

  5. #5
    Membre confirmé Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Par défaut
    Autant pour moi, la méthode avec AffineTransform fonctionne, j'avais oublié une ligne...

    En revanche dés que l'on y met des balises HTML, ne seraient ce que <html></html>, le texte se remet à l'horizontale...

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utilises le JXTransformer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire verticalement ds un TTabControl
    Par josse95 dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/04/2007, 14h44
  2. Ecrire verticalement ou diagonalement dans une datawindow
    Par jpdar dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 07/12/2006, 14h06
  3. Ecrire verticalement
    Par jamescook dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/10/2006, 09h29
  4. Ecrire verticalement dans un tableau
    Par davinout dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 18/05/2006, 07h22
  5. [XSL:FO] Ecrire verticalement
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/02/2006, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo