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 :

JScrollPane dans une JInternalFrame.. possible ?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Par défaut JScrollPane dans une JInternalFrame.. possible ?
    Bonjour à tous,

    Je me suis mis au java depuis un peux plus d'une semaine et mes connaissances ne sont donc pas parfaites ^^...
    Aussi je sollicite votre aide pour un petit problème ...

    j'y vais par étape pour être clair :
    J'ai une JInternalFrame (positionnée dans un JDesktopPane).
    Dans cette JInternalFrame j'implémente une classe extends JPanel.
    Dans cette class, je ne fais qu'afficher des images (via ImageIcon).
    Le truc, c'est que je n'arrive pas à avoir de scrollbar alors que je l'ai spécifié.


    maintenant : le code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // ...
       JDesktopPane desktopPane = new JDesktopPane();
       JPanel contentPane = (JPanel)this.getContentPane();
       contentPane.add(desktopPane);
       JInternalFrame f = new JInternalFrame();
       f.setVisible(true);
       panelMap = new Affichage();
       f.getContentPane().add(panelMap);
       f.add(new JScrollPane(panelMap)); // n'a pas l'air de marcher
       desktopPane.add(f);
    // ...

    dans la class Affichage maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Affichage extends JPanel {
      Affichage() { /* ... */ }
      public void paintComponent(Graphics g) {
        int x = 10, y = 0;
        g.drawImage((new ImageIcon("path/picture.png")).getImage(),  x, y, null); y += 30;
        g.drawImage((new ImageIcon("path/picture.png")).getImage(),  x, y, null); y += 30;
        // plein de fois histoir de dépasser la fenêtre et tester le scrolling
        g.drawImage((new ImageIcon("path/picture.png")).getImage(),  x, y, null); y += 30;
      }
    }
    voilà je pense avoir été suffisement clair et j'attend vos réactions avec impatience, parce que je suis vraiment bloqué là ...

    Merci d'avance !

    PS: je me permet de vous poser la question sachant que j'ai fait toutes les démarches nécessaires avant : javadoc, google, FAQ, recherche developpez, etc.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Par défaut
    Permettez moi d'insiter... à l'allure où les posts affluent je ne veux pas être oublié
    Peut-etre me suis-je mal exprimé ? Ou bien personne ne sais comment résoudre mon problème ? :/

    s'il vous plaît.... ^^

  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
    Tu ajoute ta panelMap à deux conteneurs différents, normal que ça ne marche pas, soit tu l'ajoute à ton scrollpane, soit tu l'ajoutes au contentpane de ta JInternalFrame, pas aux deux

    Sinon dans ta redéfinition du JPanel pour la classe affichage, fais un appel à super.paintComponeent(g), ça t'éviteras des soucis par la suite...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Par défaut
    Tout d'abbord merci pour ton interret,

    J'avais effectivement rajouté mon panelMap aux 2 conteners, après correction je l'ai seulement ajouté au scrollpane, mais ça ne règle malheuresement pas mon problème :/

    Sinon dans ta redéfinition du JPanel pour la classe affichage, fais un appel à super.paintComponeent(g), ça t'éviteras des soucis par la suite...
    Je ne comprend pas s'que tu veux dire (pardon)...
    Si c'est pour faire appelle au paintComponent de la class mère, c'est pas ce que je recherche... En effet, la class mère défini d'autres JInternalFrame (qui suivent le même principe que celle décrite au-dessus) qui dessinent d'autres images, donc si je fais appel à super.paintComponant(g) , je ne pourais pas différentier les affichages.
    ou alors j'ai complètement faux ?

    quoi qu'il en soit, mon problème persiste.

  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
    Citation Envoyé par narsi1
    Tout d'abbord merci pour ton interret,

    Je ne comprend pas s'que tu veux dire (pardon)...
    Si c'est pour faire appelle au paintComponent de la class mère, c'est pas ce que je recherche... En effet, la class mère défini d'autres JInternalFrame (qui suivent le même principe que celle décrite au-dessus) qui dessinent d'autres images, donc si je fais appel à super.paintComponant(g) , je ne pourais pas différentier les affichages.
    ou alors j'ai complètement faux ?
    Dans ton cas le super.paintComponent(g) appelle en fait le paintComponent du JPanel ce qui te permet d'afficher correctement les composants posés sur ce panel

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Par défaut
    merci encore pour votre soutien, mais malgré celà, je n'y arrive toujours pas

    Il faudra aussi que tu redéfinisse la méthode getSize de ta classe Affichage (ou alors que tu appelles setPreferredSize ou setSize dans le constructeur).
    j'ai essayé tout se que tu as énoncé mais non, ça change pas.

    Au final c'est possible de mettre des scrollbares dans des JInternalFrame ?

    Sinon, si vous avez un exemple sur lequel je peux m'inspirer ce serait sympa.

    Merci encore !

    -----------------------------------------------------------------

    j'ai isolé mon problème pour vous en faire part, afin de faire les tests c'est plus simple ...

    code classe mère :
    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
     
    import javax.swing.*;
     
    public class Plop extends JFrame {
    	private static final long serialVersionUID = 1L;
        // sub-windows
        JInternalFrame f0 = new JInternalFrame();
        // class contenant le Jpanel
        Plip affichage;
     
        public Plop() {
            // JFrame skills
            setTitle("Editeur de carte");
            setVisible(true);
            setSize(800, 700);
            requestFocus();
     
            // Mise en place du conteneur de sous-fenêtres
            JDesktopPane desktopPane = new JDesktopPane();
            JPanel contentPane = (JPanel)this.getContentPane();
            contentPane.add(desktopPane);
     
            // Creation de la sous-fenêtre
            f0.setSize(673, 635);
            f0.setVisible(true);
            f0.setResizable(true);
            affichage = new Plip();
            JScrollPane scrollpane = new JScrollPane(affichage);
            scrollpane.setSize(500, 500);
            f0.getContentPane().add(scrollpane);
    //        f0.getContentPane().add(new JScrollPane(affichage));
            desktopPane.add(f0);
     
            SwingUtilities.updateComponentTreeUI(this);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }
     
        public static void main(String[] args) {
    		new Plop();
        }
    }
    code class fille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import java.awt.*;
    import javax.swing.*;
     
    public class Plip extends JPanel {
    	private static final long serialVersionUID = 1L;
    	Plip() { }
    	public void paintComponent(Graphics g) {
        	  for (int i = 0, l = 0; i < 50; i++, l += 30) {
        	    g.drawImage((new ImageIcon("warn.gif")).getImage(), 0, l, null);
        	  }
    	}
    }
    voilà j'ai essayé avec vos conseils, mais vu que ça ne donnait rien, j'ai laissé tel quel pour éviter les erreurs.
    pour les tests il ne vous faudra qu'une image "warn.gif"

    merci d'avance !

  7. #7
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par narsi1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       f.getContentPane().add(panelMap);
       f.add(new JScrollPane(panelMap)); // n'a pas l'air de marcher
    Essaie plutôt à la place de ces deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.getContentPane().add(new JScrollPane(panelMap));
    Il faudra aussi que tu redéfinisse la méthode getSize de ta classe Affichage (ou alors que tu appelles setPreferredSize ou setSize dans le constructeur).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

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

Discussions similaires

  1. Try catch dans une dll - possible ?
    Par Pendary dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/03/2007, 16h48
  2. Réponses: 6
    Dernier message: 18/12/2006, 15h55
  3. JScrollPane dans une JInternalFrame contenant un graphic
    Par Sirkiller dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/06/2006, 11h13
  4. lancer un JAR dans une JInternalFrame
    Par kesiahlex dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 18/04/2006, 16h53
  5. Utiliser deux bases dans une requete, possible ?
    Par compu dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2006, 14h09

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