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

AWT/Swing Java Discussion :

Miniature d'un JComponent


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut Miniature d'un JComponent
    Bonjour !

    Je souhaite(rai) réaliser une Miniature d'un JComponent (par exemple si on était dans acrobat reader si mon JComp. était une page (affichée ou non), la miniature serait le truc qu'on obtient en cliquant avec le bouton du milieu qui s'affiche en haut à droite, avec lequel on peut zoomer se déplacer dans la page etc).
    Je souhaiterai ne garder que les graphics du composant et pas les Mouse/Key/etc. listeners. et avoir une fonction zoom.
    Pour faire une autre comparaison, cela pourrait être comme dans certains jeux vidéos où on a une mini carte.

    J'ai regardé beaucoup de choses notamment
    http://java.developpez.com/faq/gui/?...egistrer_image
    qui me semblait marcher théoriquement, mais qui ne marche pas.

    A noter : je ne veux pas le même composant affiché d'une autre manière (genre soit en mode normal soit en mini), mais putôt un composant du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MonComposant compo = new MonComposant();
    MaMiniature mini = new Miniature(compo);
    Et le truc, - vous avez compris la, quand même, non ? - ,c'est que j'y arrive pas du tout !

    Est-ce que qqun pourrait m'aider ?
    En plus, ça pourrait servir à bien d'autres personnes !

    Merci d'avance.

    a7aa7a





    PS: Je ne sais pas si je dois mettre ca sur la même discussion, mais pour moi ça s'en rapproches, je cherche à faire (oui bon d'accord je sais j'ai pas réussi ca marche pas encore non plus! )
    une sorte de JScrollPane à la façon d'un ipod touch ou (c'est différent !, d'un jeu vidéo, encore !, (du genre dans ce cas la on passe la souris sur les bords et ça décale la vue) ).
    J'avais réussi à faire ça pour un de mes propres composants, c'était facile -et un peu brouillon-, mais je sais pas le faire pour un composant du genre jscrollpane, d'autant plus que d'autres pb s'ajoutent (je pense): quand on drag avec la souris (je veux qu'on puisse le faire que sur les bords, pas au centre) les listeners du composant s'activent à priori, ce que je veux éviter, du moins sur les bords mais pas au centre...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut
    En relisant, j'ai vu que j'avais pas insisté, mais un des problèmes importants, c'est que le Composant n'est pas affiché, en général, parfois si (c'est aussi ça l'intérêt d'1 miniature), ce qui me posais aussi des problèmes...

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il est possible de réaliser la capture sur un composant non visible, toutefois cela nécessite quelques pré requis.


    1. Ton composant doit être contenu dans une classe héritant de Window (JWindow, JFrame & cie).
    2. Ta JWindow doit avoir organisé son layout interne (appeler la méthode doLayout() )
    3. Ta JWindow doit avoir une taille (la méthode pack suffira).
    4. Et roule ma poule.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.BorderFactory;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JWindow;
    import javax.swing.SwingUtilities;
     
    public class TestJscrollPane {
     
        public static void main(String[] args) {
     
            SwingUtilities.invokeLater(new Runnable() {
     
                @Override
                public void run() {
     
                    JPanel p1 = new JPanel();
                    p1.setBackground(Color.blue);
                    p1.setPreferredSize(new Dimension(800, 1600));
                    JPanel p2 = new JPanel();
                    p2.setBackground(Color.red);
                    p2.setPreferredSize(new Dimension(400, 1600));
                    JScrollPane jsp1 = new JScrollPane(p1);
                    jsp1.setPreferredSize(new Dimension(400, 400));
                    p2.add(jsp1);
                    p2.setBorder(BorderFactory.createEmptyBorder(60, 60, 60, 60));
                    JScrollPane jsp2 = new JScrollPane(p2);
                    jsp2.setBorder(BorderFactory.createEmptyBorder(60, 60, 60, 60));
                    jsp2.setSize(1000, 1000);
                    jsp2.doLayout();
                    jsp2.validate();
     
                    JWindow f = new JWindow();
                    f.getContentPane().add(jsp2);
                    f.pack();
     
                    f.doLayout();
                    f.validate();
     
                    BufferedImage im = new BufferedImage(jsp2.getSize().width, jsp2
                            .getSize().height, BufferedImage.TYPE_INT_ARGB);
                    Graphics2D g2d = im.createGraphics();
                    f.getContentPane().paint(g2d);
                    g2d.dispose();
                    f.dispose();
     
                    try {
                        ImageIO.write(im, "png", new File("testcomp.png"));
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
     
                }
     
            });
     
        }
     
    }
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut
    Et bien ça m'a l'air clair !

    Il ne me reste plus qu'à tester et à adapter à ce que je veux, merci bien!
    (Maintenant il me reste "plus que" les 2 autres sujets que j'ai postés en même temps !)

    Et bien c'est parti !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut
    euh.. j'ai pas essayé, mais est-ce que la jwindow doit etre visible ou bien c est pas necessaire ? (si elle doit l etre c est pas super)

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Salut, le plus simple c'est d'utiliser la méthode print(Graphics). Tu peux appliquer un Transform sur le Graphics pour faire des effet genre réduction, retournement, etc avant d'appeler print.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par a7aa7a Voir le message
    euh.. j'ai pas essayé, mais est-ce que la jwindow doit etre visible ou bien c est pas necessaire ? (si elle doit l etre c est pas super)
    Bah lis un peu le code que je t'ai filé au moins. Y a-t'il un setVisible dedans?

    Je ne crois pas....
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut
    je ne sais si je peux réveiller ce sujet ou non, mais pour ceux que ça intéresse (moi j'ai pas le temps du tout, héhé),
    ce qui est intéressant, c'est ça :

    https://substance.dev.java.net/see.html

    vous lancez le jnlp via web start, et substance s'affiche (très intéressant ce projet). Ensuite, onglet Scroll Pane (en bas de la liste des onglets).
    Maintenant cliquez à gauche sur 'Has preview'.
    Une loupe s'affiche en bas a droite du scrollP, cliquez dessus et bougez la souris.
    Fameux, hein ?
    Au moins je sais que c'est possible de faire ce que je veux...
    Mais comme j'ai pas le temps je verrai plus tard, perso. En tout cas si ça a aidé qqun, ce ne sera pas un messg de perdu! Voila, je vous ai prévenu !

    Amicalement,


Discussions similaires

  1. [debutant] Retirer les bords de Jcomponent
    Par cosmos.1097 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 29/06/2005, 17h27
  2. [GD] probleme de perte de qualité lors de miniature de photos?
    Par brasco06 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 23/05/2005, 16h03
  3. [Composant] Création d'un JComponent
    Par Kuroro dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/05/2005, 10h56
  4. [ImageMagick] Images miniatures
    Par oli2a dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 08/11/2004, 14h42
  5. Algorithme miniature JPEG
    Par Krutzyski dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/04/2004, 11h06

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