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 :

JPanel et JScrollpane


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut JPanel et JScrollpane
    Bonjour,

    Je travaille sur du traitement d'image vidéo en java. J'ai créer un JPanel contenant ma vidéo et j'y est ajouter un JScrolpane.
    Mon problème est simple, lorsque je veux utiliser mes scrollbar pour voir le reste de l'image, celle-ci n'est pas repaint et doncl'image se coupe au fur est a mesure que je bouge la scrollbar.

    Connaissais vous un moyen de faire une méthode repaint à chaque fois que l'on bouge une scrollbar?

    Merci d'avance.

  2. #2
    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
    Normalement ça marche automatiquement,

    Fais nous plutôt voir le composant que tu utilises pour afficher l'image, le problème vient probablement de celui ci.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut
    Eh bien pour afficher j'utilise la librairie dsj comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dsfg = new DSCapture(DSFiltergraph.RENDER_NATIVE | DSFiltergraph.INIT_PAUSED, dsi[0][aux], false, null, this);
    dsfg.setSize(785, 510);
    dsfg.play();
    Cam_X = dsfg.getMediaDimension().width;
    Cam_Y = dsfg.getMediaDimension().height;
     
     this.mv.getImageView().getCoord().setVisible(true);
    			            this.mv.getImageView().getImgBox().add(dsfg.asComponent());
    Et voici mon InternalFrame où est affiché imgBox :

    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
    public class imageView extends JInternalFrame 
    {
    	private JLabel coord;
    	private JPanel imgBox;
    	private JScrollPane jsPane;
     
    	/**
             * Constructeur de la fenetre prenant en paramètre la fenetre principale où seront introduit les InternalFrame
             * 
             * @param pMv
             */
    	public imageView(mainView pMv)
    	{
    		super("Image", true,  //resizable
    		          	   false, //closable
    		          	   false, //maximizable
    		          	   false);//iconifiable
     
    		imgBox = new JPanel ();
    		jsPane = new JScrollPane();
     
    		//Le label des coordonnées
    		coord = new JLabel("Coordonnées");
    		coord.setVisible(false);
     
    		//Le JScrollPane
    		jsPane = new JScrollPane();
    		jsPane.getViewport().add(imgBox);
     
    		HadjustListener hadjustListener = new HadjustListener();
    		VadjustListener vadjustListener = new VadjustListener();
     
    jsPane.getVerticalScrollBar().addAdjustmentListener(vadjustListener);
    jsPane.getHorizontalScrollBar().addAdjustmentListener(hadjustListener);
     
    	getContentPane().setLayout(new BorderLayout());
            getContentPane().add(jsPane,BorderLayout.CENTER);
            getContentPane().add(coord,BorderLayout.SOUTH);
     
           this.setPreferredSize(new Dimension(800, 600));
           this.pack();
    }
    Comme vous le voyez j'ai tenté d'ajouter un listener à ma ScrollPane mais sans succès.

    Roulian

  4. #4
    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
    T'es en train de mélanger du Swing et de l'AWT.

    En effet laméthode asComponent de la classe DSCapture te renvoie un composant AWT.

    Or l'intégration AWT Swing est un art subtil car les deux frameworks ne sont pas basé sur la même philosophie. cf FAQ

    Toutefois, depuis les dernières versions de java 6, l'intégration a été facilité. Par contre celà nécessite que certaines conditions soient remplies. Cf le papier suivant: http://java.sun.com/developer/techni...ng_components/

    Il contient un paragraphe spécifique sur l'intégration d'un composant heavyweight (issu d'AWT donc) dans un JScrollPane (issu de Swing)



    If you are adding heavyweight components to a JScrollPane, the scroll pane must use the SIMPLE_SCROLL_MODE mode. The BLIT_SCROLL_MODE and BACKINGSTORE_SCROLL_MODE scrolling modes are not supported because they have been optimizied to paint lightweight components. You can change the scrolling mode by using the JViewPort.setScrollMode(int) method.
    De fait il te faut appeler la méthode setScrollMode du viewport du JScrollPane en lui passant en paramètre la valeur JViewport.SIMPLE_SCROLL_MODE.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut
    J'ai donc ajouté la ligne que tu m'as donné et même essayé les autres mais il n'y a aucun changement je suis vraiment perdu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Le JScrollPane
    jsPane = new JScrollPane();
    jsPane.getViewport().add(imgBox);
    		jsPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
    C'est peut être le fait d'utiliser la librairie dsj qui me pose des problèmes mais je n'en ai pas trouvé d'autres. C'est la première fois que je fais du traitement d'images vidéo en java.
    Si tu connais une autre librairie me permettant de réaliser le même traitement je suis preneur.

    Roulian

  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
    Tu utilises bien la toute dernière version de java?

Discussions similaires

  1. probleme JPanel dans JScrollPane
    Par hbar01 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 30/05/2008, 19h37
  2. JPanel et JScrollPane
    Par bellemlih dans le forum Composants
    Réponses: 4
    Dernier message: 22/04/2008, 15h53
  3. JPanel et JScrollPane
    Par akrobat dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/06/2007, 10h38
  4. Probleme [SWING]: JPanel dans JscrollPane
    Par malandro dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 24/05/2006, 21h02
  5. [Débutant] JPanel dans JScrollPane
    Par Nicolas_75 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 06/04/2005, 09h39

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