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 :

Problème avec JScrollPane et onglet


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 86
    Par défaut Problème avec JScrollPane et onglet
    Bonjour

    je fait une application où j'affiche des images sur des onglets avec un JFileChooser, voilà les problèmes :
    1- si l'image est grande les barres ne s'affiche pas
    2- comment faire pour que si j'ouvre plus d'une image ça s'affiche sur d'autre onglet

    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
     
    final JMenuItem ouvrirMenuItem = new JMenuItem();
    		ouvrirMenuItem.addMouseListener(new MouseAdapter() {
    			public void mousePressed(MouseEvent arg0) {
    				JFileChooser chooser = new JFileChooser();//création dun nouveau filechosser
    				chooser.addChoosableFileFilter(new ImageFilter());		       
    				chooser.setApproveButtonText("OK"); //intitulé du bouton											
    				int returnValue = chooser.showOpenDialog(null);
    		        if (returnValue == JFileChooser.APPROVE_OPTION) {		            
    		          String nom = chooser.getSelectedFile().getName();
    		          String cheminFichier = chooser.getSelectedFile().getAbsolutePath();        
    		          final CloseAndMaxTabbedPane tabbedPane = new CloseAndMaxTabbedPane(true);		          
    		          AfficherImage image = new AfficherImage(cheminFichier);
    		          JScrollPane panel = new JScrollPane();
    		          panel.add(image);		          		          	              
    		          scrollPane.setViewportView(tabbedPane);
    Merci de votre aide

  2. #2
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Si je me souviens bien, il y a une méthode JScrollPane.validate() qui permet d'activer ton JScollPane...

  3. #3
    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
    Le JScrollPane utilise la preferredSize du composant qu'il contient pour déterminer s'il doit afficher les scrollBars ou pas.

    Il est probable ici que tu n'ai pas changé la preferreSize de la classe AfficherImage quand tu lui as affecté une image plus grande. (grosso merdo il faut affecter à la poreferredSize d'AfficherImage la taille de l'image en elle même).

    Et ensuite pour l'onglet il suffit juste de faire un add sur ton JTabbedPane.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 86
    Par défaut
    Salut

    bon j'ai essayé, vos suggestion mais ça a pas marché, voilà le code de la classe Afficheimage,
    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
     
    class AfficherImage extends Canvas
    {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    int largeurEcran = screenSize.width;
    int hauteurEcran = screenSize.height;
    Image image;
     
    public AfficherImage(String url)
      {
      image = getToolkit().getImage(url);
      prepareImage(image, this);  
      }
     
    public void paint(Graphics g)
      {
      g.drawImage(image, 0, 0, this);
      }
    public Dimension getPreferredScrollableViewportSize() {
    	return getPreferredSize();
    }
    public boolean imageUpdate(Image image, int info, int x, int y, int l, int h)
      {
      if ((info & (WIDTH | HEIGHT)) != 0)
        {
        setSize(l, h);
        setBounds( 0, 0, l+8, h+32 );
        }
     
      if ((info & (ALLBITS)) != 0)
        {
        repaint();
        return false;
        }
      else
        {
        return true;
        }
      }
    }
    Pour l'onglet c'est toujours le même problème, quand j'ouvre une image avec Ouvrir ça s'affiche sur l'onglet précédant.

  5. #5
    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
    Bon on va commencer par le premier point, il ne faut pas utiliser de composants AWT (à savoir ici la classe héritant de Canvas) dans une application Swing (à cause d'histoires de ZOrder & cie, assez problèmatiques dans le c&as des menu et des JTabbedPane, ainsi que pour les JScrollPane.

    Donc commences par remplacer le par un Puis renomme la méthode paint en maintComponent

    De plus, la méthode getPreferredScrollableViewportSize n'est pas celle à redéfinir pour changer la preferredSize de ton composant, la méthode à redéfinir étant la méthode getPreferredSize. Cet méthode doit être redéfinie pour renvoyer la taille de l'image que le composant affiche.

    de plus dans ta méthode imageUpdate il ne faut pas appeler setSize, ça ne sert à rien. Met plutôt à jour les éléments qui te permettent le calcul de la preferredSize.

  6. #6
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 86
    Par défaut
    bon, quand j'ai changé Canvas par JComponent l'image ne s'affiche même pas sur le scrollpane

    et pour ce qui est la 2eme partie j'ai pas bien compris ce qu'il faut faire en plus j'ai remarqué que si je déroulé le menu l'image resté en dessus

  7. #7
    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
    Fais voir ton code en l'état actuel.

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

Discussions similaires

  1. Problème avec JScrollPane
    Par doons dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/11/2007, 11h09
  2. Problème avec JScrollPane
    Par zolotaya dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/07/2007, 20h06
  3. Réponses: 8
    Dernier message: 13/07/2007, 00h16
  4. Problème avec jscrollpane
    Par mmb04 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/05/2007, 13h51
  5. Problème avec JScrollPane et label
    Par gl0be dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 26/11/2004, 17h08

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