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 et JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 68
    Par défaut JScrollPane et JPanel
    Bonjour, je vais essayer d'être le plus simple dans mes explications...

    Alors, voilà ce que je possède :
    - Une classe Damier qui hérite de JPanel, dans laquelle je dessine un damier , qui est dessiné par paintComponent !!

    - Une classe Fenetre qui hérite de JFrame et donc qui crée ma fenêtre !!

    Ma classe Fenêtre, possède une méthode :
    - JPanel creePanelCentre() qui initialise le panel central !!
    - JPanel creePanelNord() qui va créer mon panel au nord...

    puis une méthode :
    - void initialiseComposants, qui va être appeler dans mon constructeur pour initialiser chacun de mes panel ci-dessus !!

    Venons-en au problème...

    Dans ma méthode creePanelCentre(), je crée un damier, et donc selon la taille, si il dépasse la taille de la fenêtre je voudrais que des scroll apparaissent...

    Je sais qu'il faut utiliser des JScrollPane, et leur mettre en paramètre l'objet en question mais là ça ne marche pas...

    J'ai recherché sur le net, j'aitrouvé un mec qui avait le même problème que moi, mais on lui disait d'utiliser un "Canvas" et/ou un doLayout...choses que je ne connais pas, et en plus il n'y avais pas de code...

    Donc si quelqu'un a une solution pour m'aider... :s

    Merci d'avance !!

  2. #2
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par Yopii Voir le message
    Je sais qu'il faut utiliser des JScrollPane, et leur mettre en paramètre l'objet en question mais là ça ne marche pas...
    Peux-tu préciser qu'est-ce qui ne marche pas? Pour le cas ou la vue n'implémente pas l'interface "Scrollable", le ScrollPane Layout détermine la taille selon la PreferredSize de la vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JScrollPane scrollpane = new JScrollPane(panel);
    panel.setPreferredSize(...);

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 68
    Par défaut
    Merci pour ta réponse mais je en comprend pas...

    Voici mon code, je pense que ça sera plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void initialiseComposants(){
    		c.setLayout(new BorderLayout());
     
    		JPanel nord = this.creePanelNord();
    		nord.setBackground(Color.red);
    		c.add(nord, "North");
     
    		JPanel centre = this.creePanelCentre();
    		c.add(centre,"Center");
     
    	} // Fin de la méthode initaliseComposants

    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 creePanelCentre(){		
    		JPanel pCentre = new JPanel(new BorderLayout());
     
    		String result = JOptionPane.showInputDialog(null, "Taille du damier", "TAILLE"); // Temporaire
    		int taille = Integer.parseInt(result);
    		damier = new Damier(taille);
    		//pCentre.add(damier, "Center");
     
    		JScrollPane scroll = new JScrollPane(pCentre);
    		pCentre.add(scroll, "Center");	
     
     
    		return pCentre;
    	} // Fin de la méthode creePanelCentre
    Et je met aussi le code ma class damier...:

    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
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
    public class Damier extends JPanel{
     
    	private int taille;
    	private Case[][] damier;
    	private String[] tabLettres = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
     
    	public Damier(int taille){
    		this.taille = taille;
    		damier = new Case[taille][taille];
     
    	} // Fin du constructeur Damier
     
    //-------------------------------- ACCESSEURS & MUTATEURS --------------------------------\\
     
    	public int getTaille(){
    		return this.taille;
    	}
     
    	public void setTaille(int taille){
    		this.taille = taille;
    	}
     
     
    //-------------------------------- AUTRES METHODES --------------------------------\\
     
    	public void paintComponent(Graphics g){
     
    		super.paintComponents(g);
     
     
    		int margeHaut = 50; // Distance entre la haut et la grille
    		int margeCote = 100; // Distance entre le bird gauche et la grille, permet de centrer la grille
    		int initX = margeCote, initY = margeHaut; // Initialisation des coins gauches du début du rectangle
    		int tailleCarre = 35; // Taille des carrés à l'écran		
    		int startWrite = margeCote + (tailleCarre/2);
     
     
     
    		for(int i =0; i<taille; i++){
    			if(taille <26){
    			g.drawString(tabLettres[i], startWrite, margeHaut-10);
    			startWrite += tailleCarre;
    			}
    			else{
    				g.drawString(String.valueOf(i), startWrite, margeHaut-10);
    				startWrite += tailleCarre;
    			}
    		}// Fin du for(i) de dessine lettres
     
    		startWrite = margeHaut+ (tailleCarre/2);
     
    		for(int i = 0; i < taille; i++){
    			g.drawString(String.valueOf(i), margeCote-20, startWrite);
    			for(int j = 0; j <taille; j++){
    				g.drawRect(initX, initY, tailleCarre, tailleCarre);
    				initX += tailleCarre;
     
    			} // Fin du 2e for(j)
    			initX = margeCote;
    			initY += tailleCarre;
    			startWrite += tailleCarre;
    		} // Fin du 1er for(i)
     
     
     
    	} // Fin de la méthode paintComponent
     
     
    } // FIN DE LA CLASS DAMIER

    J'aimerai juste de lorsque je dessine un damier plus grand que la taille de mon appli, qui je pense sera automatiquement en 800x600, des scroll apparaissent...enfin je pense que vous aviez compris...

  4. #4
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Essaie ceci:
    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
    ...
    JScrollPane scroll = new JScrollPane(damier);  // <---ici tu avais écrit  pCentre au lieu de damier
    ...
    public class Damier extends JPanel {
    ...
        public Damier(int taille) {
            setTaille(taille);//<--------------------------------
        }
    ...
        public void setTaille(int taille) {
            this.taille = taille;
            setPreferredSize(new Dimension(120 + taille * 35, 60 + taille * 35));//<-----------------------
        }
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);  //<-------------ici tu avais écrit par mégarde paintComponents !!!
    ...

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 68
    Par défaut
    Merci ça fonctionne !! Cependant, la fenêtre ne subit pas de repaint() lorsque j'utilise les scroll, et donc j'obtiens assez horrible...

    Donc comment faire pour faire faire un repaint à chaque fois qu'on touche les scroll ??
    Ou autrement, comment résoudre ce problème ??

    J'ai pensé de faire un thread qui ferait un repaint() toutes les x secondes ou ms, mais le problème c'est que si les scroll ne sont pas présent et même si ils le sont, ça va utiliser énormément de ressources pour pas grand choses à la fin...

    Donc si quelqu'un a une solution :s

  6. #6
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Comme proposé déjà plus haut, essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);  //<-------------ici tu avais écrit par mégarde paintComponents !!!
    ...
    En clair: tu dois écrir "paintComponent" sans "s" à la fin, car "paintComponents" appelle un toute autre méthode!

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

Discussions similaires

  1. JScrollPane et JPanel
    Par Janosor dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 06/02/2010, 18h11
  2. JScrollPane et JPanel
    Par Schyzophrenic dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 04/07/2008, 19h48
  3. JscrollPane et Jpanel
    Par restricteur dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 21/05/2008, 21h34
  4. JScrollPane et JPanel
    Par elfiestador dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 26/12/2006, 16h43
  5. JScrollPane Graphics/ JPanel
    Par daedric dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 26/05/2006, 12h28

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