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

Agents de placement/Fenêtres Java Discussion :

[Swing] JPanel dans JScrollPane ça ne marche pas !


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Swing] JPanel dans JScrollPane ça ne marche pas !
    Salut à tous !
    Je suis en train de dév une interface en java et j'ai des soucis.
    J'aimerais mettre des images les unes à la suites des autres sur une ligne et si ça dépasse qu'on puisse scroller.
    J'ai donc découper ma fenetre principale en deux avec un gridlayout.
    C'est dans le cadre du haut que je veux mes images.
    J'ai donc mit un JScrollPane dans la partie du haut.
    J'ai ajouté un JPanel à ce JScrollPane que j'ai découpé de novueau avec un gridLayout en 10 cases. Dans chacune de ces cases je met un JPanel qui contient une image.
    Et ça ne marche pas...
    Ca me réduit mes images pour rentrer dans la largeur de la fenêtre et ça scroll pas.
    Je vous met les bouts de codes interessants.

    Le scroll :
    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
    package gui;
     
    import javax.swing.JScrollPane;
    import javax.swing.JPanel;
    import java.awt.Image;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import java.awt.GridLayout;
    import java.awt.Dimension;
     
    public class PanneauTrain extends JScrollPane {
      private Image img;
      public PanneauTrain() {
        super(JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        this.setPreferredSize(new Dimension(800, 800));
        try {
          img = ImageIO.read(new File("img_test.gif"));
        } catch (IOException e) {
          // Faire qqch au cas où le fichier ne s'ouvre pas
        }
        JPanel pane = new JPanel();
        pane.setSize(800,800);
        pane.setLayout(new GridLayout(1,10));
        for(int i=1; i< 10; ++i) {
          pane.add(new PanneauVoiture(img));
        }
        this.setViewportView(pane); 
      }
    }
    Puis les petits JPanel qui contiennent les images :
    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
    package gui;
     
    import javax.swing.JPanel;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Dimension;
     
    public class PanneauVoiture extends JPanel implements MouseListener {
      private Image img;
      public PanneauVoiture(Image img) {
        this.img = img;
        this.setMinimumSize(new Dimension(img.getWidth(this) , img.getHeight(this)));
      }
     
      public void paintComponent(Graphics g) {
        g.drawImage(img, 15, 15, this);
      }
     
      public void mouseClicked(MouseEvent event) {
      }
     
      public void mouseEntered(MouseEvent event) {
      }
     
      public void mouseExited(MouseEvent event) {
      }
     
      public void mousePressed(MouseEvent event) {
      }
     
      public void mouseReleased(MouseEvent event) {
      }       
    }
    Voilà, en éspérant que vous puissez m'aider ! Merci beaucoup

    Nicolas

  2. #2
    Membre expérimenté Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    le gridlayout redimensionne les composants pour rentrer dans l'espace disponible. Vu que tu veux qu'une ligne d'images utilise plutôt un flowlayout qui va rajouter les images les unes après les autres.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bon alors merci beaucoup.
    Si j'utilise le FlowLayout plus rien ne s'affiche.
    J'ai tenté de remplacer le pane.add par un pane.addLayoutComponent mais il me dit que ce symbole n'existe pas :s

    Merci quand même

  4. #4
    Membre expérimenté Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Essai de ne pas préciser la taille du panel "pane.setSize(800,800);" .

  5. #5
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    Voici une façon de faire:
    1. tu crées une classe fille de JPanel qui représentera tes images
      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
      public class PanelImage extends JPanel {
      private Image image;
      private static final int LARGEUR = 400; //Pour figer la taille du panel
      private static final int HAUTEUR = 400;
       
      public PanelImage(String fichierImage) {
           try {
             image = ImageIO.read(new File(fichierImage));
         } catch (IOException e) {
             e.printStackTrace();
         }
         setPreferredSize(new Dimension(LARGEUR, HAUTEUR));
      }
       
      public void paintComponent(Graphics g) {
          super.paintComponent(g);
         g.drawImage(image, 0, 0, LARGEUR, HAUTEUR, null);
      }
      }
    2. tu définis dans ta fenêtre un mécanisme pour ajouter dynamiquement les images (en FlowLayout, même si d'autres layouts peuvent fonctionner)
      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
      private JPanel panelImages;
       
      public FenetreImages() {
      super("Fenêtre images");
      initComponents();
      }
       
      private void initComponents() {
      panelImages = new JPanel(new FlowLayout(FlowLayout.LEFT));
      }
       
      public void addImage(String fichierImage) {
      panelImages.add(new PanelImage(fichierImage));
      }
      }
    3. tu ajoutes ton "conteneur" à ta fenêtre dans un JScrollPane
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      add(new JScrollPane(panelImages));
      dans la méthode initComponents de la fenêtre

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup ça marche \o/

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

Discussions similaires

  1. [MySQL] pas d'erreur mais l'insertion dans la base ne marche pas bien
    Par info_sara dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/05/2008, 14h55
  2. PB VBA : ecriture dans une feuille active => marche pas !
    Par MeHo_ dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/01/2008, 16h47
  3. Probleme [SWING]: JPanel dans JscrollPane
    Par malandro dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 24/05/2006, 21h02
  4. requête dans acces qui ne marche pas...
    Par sam01 dans le forum Access
    Réponses: 3
    Dernier message: 14/12/2005, 16h48
  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