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 :

ScrollBar sur un ensemble de JLabel


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut ScrollBar sur un ensemble de JLabel
    Bonjour,

    J'ai un ensemble de JLabel où je leur affecte une icone et ces JLabel sont placé sous forme de grille. J'aimerais définir une taille et si les JLabel dépassé cette taille là il y ai une scroll bar pour pouvoir les voir.
    J'ai vu l'objet JScrollPane mais il semble s'utiliser que sur un élément hors moi j'ai plusieurs élément. J'ai pensé à ajouté les différents JLabel dans un même conteneur et d'ajouter ce conteneur au JScrollPane mais je ne vois pas quoi utiliser.

    Est ce la bonne idée ? Avez vous des pistes à m'indiquer ?

    Merci d'avance

    Edit : Je pensais être dans la rubrique "Interface graphique" pouvez déplacé ce topic svp

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu peux mettre tes labels dans un JPanel.
    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
    public class ScrollPanelExemple {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.add(new JScrollPane(createPanel()));
     
    		frame.setSize(300,300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static Component createPanel() {
    		JPanel panel = new JPanel(new GridLayout(0, 1));
     
    		for(int i=0; i<100; i++) {
    			panel.add(new JLabel("Texte " + (i+1)));
    		}
     
    		return panel;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    Le problème c'est que j'ai d'autre élément et je veux pas qu'il soit "scrollé"

    Nom : Capture.PNG
Affichages : 107
Taille : 26,6 Ko

    Seul les carrés blanc doivent pouvoir être affectées par le défilement

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu veux dire un truc comme suit ?

    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
    public class ScrollPanelExemple {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel mainPanel = new JPanel();
    		mainPanel.setLayout(new OverlayLayout(mainPanel));
    		JScrollPane scrollPane=new JScrollPane(createPanel()); 
    		scrollPane.getViewport ().setScrollMode ( JViewport.SIMPLE_SCROLL_MODE );
    		scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
     
    			@Override
    			public void adjustmentValueChanged(AdjustmentEvent arg0) { 
    				mainPanel.revalidate();
    				mainPanel.repaint(); 
    			}
    		});
     
    		JPanel frozenPanel = new JPanel(new GridBagLayout());
    		frozenPanel.setOpaque(false);
    		frozenPanel.add(new JButton("Clique-moi !"));
     
    		mainPanel.add(frozenPanel);
    		mainPanel.add(scrollPane);
     
    		frame.add(mainPanel);
     
    		frame.setSize(300,300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static Component createPanel() {
    		JPanel panel = new JPanel(new GridLayout(0, 1));
     
    		for(int i=0; i<100; i++) {
    			panel.add(new JLabel("Texte " + (i+1)));
    		}
     
    		return panel;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    C'est quasiment ça sauf que j'aimerais que les scrollBar soit seulement autour des JLabel (carré noir sur la photo)

    Nom : Sans titre.png
Affichages : 128
Taille : 39,0 Ko

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Bah, c'est le cas dans mon exemple. Bien sûr, il faut adapter la taille de la fenêtre pour que ça se cale sur la taille de tes cases, forcément, mais c'est le principe.

    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
    public class ScrollPanelExemple {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel mainPanel = new JPanel();
    		mainPanel.setLayout(new OverlayLayout(mainPanel));
    		JScrollPane scrollPane=new JScrollPane(createPanel()); 
    		scrollPane.getViewport ().setScrollMode ( JViewport.SIMPLE_SCROLL_MODE );
    		scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
     
    			@Override
    			public void adjustmentValueChanged(AdjustmentEvent arg0) { 
    				mainPanel.revalidate();
    				mainPanel.repaint(); 
    			}
    		});
    		scrollPane.getHorizontalScrollBar().addAdjustmentListener(new AdjustmentListener() {
     
    			@Override
    			public void adjustmentValueChanged(AdjustmentEvent arg0) { 
    				mainPanel.revalidate();
    				mainPanel.repaint(); 
    			}
    		});
     
    		JPanel frozenPanel = new JPanel(new GridBagLayout());
    		frozenPanel.setOpaque(false);
    		frozenPanel.add(new JButton("Clique-moi !"));
     
    		mainPanel.add(frozenPanel);
    		mainPanel.add(scrollPane);
     
    		frame.add(mainPanel);
     
    		frame.setSize(354,377);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static Component createPanel() {
    		JPanel panel = new JPanel(new GridLayout(0, 10));
     
    		for(int i=0; i<100; i++) {
    			JPanel c = new JPanel();
    			c.setPreferredSize(new Dimension(64, 64));
    			c.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    			c.setBackground(Color.WHITE);
    			panel.add(c);
    		}
     
    		return panel;
    	}
     
    }


    Eventuellement, tu peux regarder aussi ce que tu peux faire avec un JLayer.


    Après, Swing c'est surtout pour faire des GUI de type conventionnel, orientée formulaire, tout ça. Pour faire des trucs plus spécifiques, il faudra réécrire un socle avec Java2D).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    J'ai réussi parfaitement ce que je voulais merci :

    Nom : Capture.PNG
Affichages : 125
Taille : 38,2 Ko

    Mais y'a un petit bug d'affichage quand je scroll et je ne vois pas du tout d'où ça vient :

    Nom : Capture.PNG
Affichages : 127
Taille : 46,7 Ko

    Edit : Il semblerait que le problème vienne de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
     
    			@Override
    			public void adjustmentValueChanged(AdjustmentEvent arg0) { 
    				revalidate();
    				repaint(); 
    			}
    		});
    Est-ce normal ?

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Cela ressemble à une conséquence du recyclage du contexte graphique. Tu manipules toi-même le contexte graphique en dehors des méthodes de dessin de Swing ?
    Tu as des classes où tu as redéfinies une méthode de dessin, genre paint(), paintComponent() ou consorts ? Une méthode dans laquelle tu aurais oublié d'appeler la "super méthode" ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    Oui justement la méthode qui créé les JLabel prend en paramètre un objet Graphics, est ce un problème ?

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    L'instance de Graphics, utilisée dans le cadre des méthodes paint() et consorts, est un objet réservé à Swing. On ne doit pas le manipuler sauf dans les méthodes de Swing qui le prennent en paramètre, telles que paint() ou paintComponent(). Swing gère la notion de contexte graphique de manière à économiser de la mémoire et du temps cpu : le même contexte graphique peut être utilisé par plusieurs composants pour leur propre rendu, Swing faisant le rendu de chaque composant, l'un après l'autre, ce qui fait que l'utiliser en parallèle du processus normal, peut donner comme résultat qu'on voit le dessin d'un composant dans un autre. Par ailleurs, je ne vois aucune raison qui nécessiterait d'avoir besoin d'un contexte graphique externe pour créer des composants, JLabel ou autre. A quoi pourrait-il bien te servir ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    L'instance de Graphics, utilisée dans le cadre des méthodes paint() et consorts, est un objet réservé à Swing. On ne doit pas le manipuler sauf dans les méthodes de Swing qui le prennent en paramètre, telles que paint() ou paintComponent(). Swing gère la notion de contexte graphique de manière à économiser de la mémoire et du temps cpu : le même contexte graphique peut être utilisé par plusieurs composants pour leur propre rendu, Swing faisant le rendu de chaque composant, l'un après l'autre, ce qui fait que l'utiliser en parallèle du processus normal, peut donner comme résultat qu'on voit le dessin d'un composant dans un autre. Par ailleurs, je ne vois aucune raison qui nécessiterait d'avoir besoin d'un contexte graphique externe pour créer des composants, JLabel ou autre. A quoi pourrait-il bien te servir ?
    Ah non, j'ai dû mal m'exprimer la méthode prend en paramètre un objet graphics mais est appelée au sein de la méthode paintComponent de mon JPanel. Je n'ai pas crée mon propre Graphics.

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je ne sais pas ce qui est pire entre utiliser un contexte graphics en dehors du thread Swing, ou créer des composants dans le process de rendu. La méthode paint() sert à dessiner dans le contexte graphique, d'où le paramètre. La construction des composants et tout ce qui s'y rapporte ne doit pas être fait dans le rendu. On n'a pas de contrôle sur le rendu, ça peut être appelé quand il est nécessaire de redessiner, à n'importe quel moment, et autant de fois que nécessaire. En plus d'être illogique, construire les composants dans ce cadre ne peut amener qu'à des résultats aléatoires. On construit une IHM à base de composants, et il est nécessaire d'en faire le rendu pour avoir des pixels à l'écran qui correspondent à cette construction. On n'utilise pas le process de rendu pour élaborer l'ihm.
    J'imagine que la création de JLabel doit provoquer à un moment donné un appel de rendu, sur un contexte qui dont pas prévu pour et donc le résultat se voit ailleurs. Comme chaque composant est dessiné dans un repère relatif à son parent, si dans le cadre du rendu d'un composant A, tu dessines un composant B, qui devrait être relatif à son parent à lui, tu vas voir le dessin de ce composant, mais là où devrait être dessiné le composant A.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    D'accord merci. Désormais l'objet Graphics n'est utilisé que dans le JLabel, il n'y a plus de soucis lorsque le addAdjustmentListener est présent.
    Par contre je n'ai pas bien compris son utilité ? En effet que cette méthode soit utilisée ou non il n'y a aucun changement.

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Sebenf0rce Voir le message
    D'accord merci. Désormais l'objet Graphics n'est utilisé que dans le JLabel, il n'y a plus de soucis lorsque le addAdjustmentListener est présent.
    Par contre je n'ai pas bien compris son utilité ? En effet que cette méthode soit utilisée ou non il n'y a aucun changement.
    C'est-à-dire ? Quelle méthode ? addAdjustmentistener ? Ça signifie quoi "utilisée" ? S'il n'y aucun code dans la méthode adjustmentValueChanged du listener ajouté par cette méthode, c'est normal qu'il ne se passe rien de différent avec ou sans l'écouteur ajouté. Mais s'il y a du code dedans, il y a peut-être un autre code qui provoque le même comportement différemment, voire même de la mauvaise manière. Par exemple, on peut rafraichir une UI uniquement lorsque c'est nécessaire (quelque chose qui change), ou toutes les millisecondes (ce qui a pour effet de rafraichir sans arrêt l'UI, donc forcément quand c'est nécessaire, ou du moins suffisament pour que l'oeil ne se rende pas compte quand c'est pas fait, en revanche, la seconde solution plombe les performances en harcelant le cpu inutilement), ou dans une boucle infinie du genre du repaint() dans paint().

    Tout ce que tu dis serait bien plus clair si je pouvais voir le code source.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    Il y a les appels aux méthodes repaint et revalider dans les AdjustmentListener, du coup la fenêtre doit être rafraichie autre part mais je vois pas où.
    Voici le code : https://github.com/SebGonzalez/2DLevelEditor
    Je les utilise dans la classe PanelCreation.

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce genre de chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    scrollPane.setBounds(xCaseNiveau, yCaseNiveau, widthCaseNiveau, heightCaseNiveau);
    		scrollPaneTexture.setBounds(xBarre+30, 20, widthTexture, this.getHeight()-100);
    ne doit pas être fait dans paint, ou paintComponent, ou méthode du même genre.

    Comme je te le disais paint (et consorts) sert à peindre, point final. On construit un mur puis on fait un trou et on pose une prise de courant. Puis on paint le mur. Et pendant qu'on peint le mur, on ne change pas la position de la prise, sinon ça veut dire qu'on bouche le trou et qu'on reperce le mur à un autre endroit), donc qu'il faut repeindre le mur (le problème, c'est que Swing peut estimer qu'il faut repeindre d'autres murs aussi, et là il va utiliser le même pinceau (pour simplifier ce qu'est un Graphics)).
    Mise à part si les dimensions ne changent pas, la méthode setBounds va faire un invalidate, un notifyNewBounds (dont on peut trop savoir ce qu'il va impliquer, selon les écouteurs), et un repaintIfNeeded : de quoi repasser dans d'autres composants avec un contexte actuellement utilisé pour le composant instance de PanelCreation.
    S'il y a adapter la taille des scrollpanes à de nouvelles conditions, le faire quand ces conditions changent (quand l'une des variables xCaseNiveau, yCaseNiveau, widthCaseNiveau, heigthCaseNiveau, xBarre, widthTexturer et this.geTHeight() change ; pour this.getHeight() utilsier un ComponentListener).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    C'est bon j'ai corrigé du coup. La redimension est effectué dans les listener.
    Par contre il n'y a aucun changement s'il y a le repaint et le revalidate ou non dans le AdjustmentListener. A quoi sert il exactement ?

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il sert normalement à cause du bouton situé au dessus de la grille. Sans ça, le bouton va scroller, ou disparaitre, selon le mode de scrolling. Si l'adjustementlistener n'a pas d'effet, c'est qu'on a ce repaint provoqué ailleurs ou autremen. Le revalidate n'est peut-être pas indispensable.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #19
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    D'accord merci beaucoup pour ton aide

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

Discussions similaires

  1. mettre un copyright sur l'ensemble de mes pages rapidemment?
    Par coco-la-bille dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/02/2006, 09h57
  2. Find & replace sur un ensemble de fichiers
    Par totofweb dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 23/12/2005, 14h29
  3. Réponses: 4
    Dernier message: 15/11/2005, 18h53
  4. [JDBC] Opération non valide sur un ensemble
    Par marti dans le forum JDBC
    Réponses: 2
    Dernier message: 13/10/2005, 19h17
  5. ScrollBar sur un TPageControl.TTabSheet
    Par Dionyzos dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/07/2004, 17h10

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