Comment faire pour que ma JScrollPane suive le focus de ma liste [Résolu]

Messages postés
29
Date d'inscription
lundi 4 janvier 2010
Dernière intervention
12 décembre 2011
- - Dernière réponse : cs_Julien39
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
- 12 déc. 2011 à 21:05
Bonjour,
voici mon code:
liste = new JList();
liste.setSelectionMode(0);
liste.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, new Color(0, 0, 0), null, null, null));
liste.setBackground(new Color(255, 239, 213));
liste.setFont(new Font("Times New Roman", Font.PLAIN, 18));
panEditeur.add(liste);
// Barre de défilement
defil = new JScrollPane(liste);
panEditeur.add(defil);

J'ai 2 boutons prévus pour déplacer les éléments présents dans ma JList vers le haut et vers le bas, par contre quand je les déplace vers la partie non visible de la liste, la JScrollPane ne suis pas le focus !
Est ce qu'il y a un moyen de faire suivre le focus de la JList par le JScrollPane ?
Merci d'avance de votre aide !
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
272
3
Merci
Pas terrible comme solution mais elle est simple :

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;





public class Test {


public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().setLayout(new BorderLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(200, 200);
f.setLocationRelativeTo(null);
final JList liste = new JList(new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"});
liste.setSelectionMode(0);
liste.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, new Color(0, 0, 0), null, null, null));
liste.setBackground(new Color(255, 239, 213));
liste.setFont(new Font("Times New Roman", Font.PLAIN, 18));
final JScrollPane scroll = new JScrollPane(liste);
JPanel sud = new JPanel(new GridLayout(1,0));
JButton monter = new JButton("Monter");
monter.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {
liste.requestFocusInWindow();
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_UP);
} catch (AWTException e) {
e.printStackTrace();
}

}
});
JButton descendre = new JButton("Descendre");
descendre.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {
liste.requestFocusInWindow();
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_DOWN);
} catch (AWTException e) {
e.printStackTrace();
}
}
});
sud.add(monter);
sud.add(descendre);
f.add(sud, BorderLayout.SOUTH);
f.add(scroll, BorderLayout.CENTER);
f.setVisible(true);
}

}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
29
Date d'inscription
lundi 4 janvier 2010
Dernière intervention
12 décembre 2011
3
Merci
J'ai trouver finalement une autre solution qui prend dirrectement l'index voulu et qui ajuste le scroll de manière a le rendre visible.
c'est la méthode liste.ensureIndexIsVisible(int index) de JList
@ +++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Darioo2
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
272
0
Merci
Bonjour,

Tu peux essayer ceci. Ca fonctionne si on parcourt la liste en utilisant les fleches du clavier. Je pense que ca doit également fonctionner avec tes boutons.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;


public class ListeTest extends JPanel {

public ListeTest(){
setLayout(new BorderLayout());
JList liste = new JList(new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"});
liste.setSelectionMode(0);
liste.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, new Color(0, 0, 0), null, null, null));
liste.setBackground(new Color(255, 239, 213));
liste.setFont(new Font("Times New Roman", Font.PLAIN, 18));
add(new JScrollPane(liste), BorderLayout.CENTER);

}

public static void main(String[] args){
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new ListeTest());
f.setSize(200, 200);
f.setLocationRelativeTo(null);
f.setVisible(true);
}

}

Commenter la réponse de cs_Julien39
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
272
0
Merci
Et une petite remarque : pour mettre des valeurs dans la JList, il vaut mieux utiliser les ListModel que de passer un tableau en argument.
Commenter la réponse de cs_Julien39
Messages postés
29
Date d'inscription
lundi 4 janvier 2010
Dernière intervention
12 décembre 2011
0
Merci
Merci pour ta réponse,

Pour ce qui est des flèches, la le scrollpane suit correctement le focus dans la liste a partir du moment qu'un élément est selectionné, et que j'utilise les fleches pour le déplacer, mon probleme est que j'ai créer 2 boutons pour déplacer les éléments dans la liste et quand je déplace un élément et qu'il sort du cadre visible, la ScrollBar ne suit plus!
Il faudrais que je puisse intervenir sur la scrollpane et lui dire de se positionner a un endroit précis par exemple en lui donnant l'index qui est selectionner dans ma liste, est ce qu'il est possible d'intervenir sur la JScrollPane et en changer la position ?

PS: Je n'utilise pas les ListModel, mais je jetterais un oeil la dessus je ne conaissais pas !
Commenter la réponse de Darioo2
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
272
0
Merci
Je regarde si je trouve un truc attend une seconde.
Commenter la réponse de cs_Julien39
Messages postés
29
Date d'inscription
lundi 4 janvier 2010
Dernière intervention
12 décembre 2011
0
Merci
super l'astuce j'y avais pas penser, c'est nickel ça fonctionne exactement comme je le voulais!
Merci pour tout !
@ +++
Commenter la réponse de Darioo2
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
272
0
Merci
DE rien.

Bon courage pour la suite de ton travail.

Peux tu accepter la réponse stp ?
Commenter la réponse de cs_Julien39
Messages postés
29
Date d'inscription
lundi 4 janvier 2010
Dernière intervention
12 décembre 2011
0
Merci
Voilà qui est fait !
Merci encore pour ton aide !
Commenter la réponse de Darioo2
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
272
0
Merci
C'est plus élégant comme solution.

Je le note, ça pourra être utile.

a+
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.