Exemple de l'utilisation de JScrollPane

JScrollPane est un conteneur qui fournit la possibilité de créer un défilement horizontal ou vertical ou à les deux à la fois quand le composant affiché dépasse la taille de la fenêtre de JFrame.

Le code pour créer une barre de défilement en java est très simple. L'utilisation la plus répondue est celle de JTextArea en ajoutant un volet de défilement au panneau.

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class JScrollPaneTest {

//zone de texte de 20 lignes et 50 colonnes
JTextArea jta = new JTextArea(20, 50);

public JScrollPaneTest(){
JFrame f = new JFrame("JScrollPaneExemple");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);

JScrollPane jsp = new JScrollPane(jta);
f.add(jsp, BorderLayout.CENTER);
f.pack();
}

public static void main(String[] args) {
new JScrollPaneTest();
}
}
Sortie
Ajouter JScrollPane dans Jtextarea

La barre de défilement crée les deux barres horizontal et vertical si le texte dépasse la dimension de la fenêtre.

JScrollBar et JViewPort

Une JScrollPane rassemble les deux classes JScrollBar et JViewPort et utilise une instance de ce dernier pour gérer la partie visible à l'utilisateur. Elle est responsable de la dimension et le positionnement basé sur les deux ascenseurs vertical et horizontal.

Voici le code pour récupérer les deux barre de défilement (horizontale et verticale):

JScrollBar vjsp = jsp.getVerticalScrollBar();
JScrollBar hjsp = jsp.getHorizontalScrollBar();
On accède au viewport avec la méthode getViewport()Dans cet exemple, on va ajouter une image dans JScrollPane et modifier la position des coordonnées du viewport avec la méthode setViewPosition(Point p).

import java.awt.Point;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;

public class JScrollPaneTest {

public JScrollPaneTest(){

JFrame f = new JFrame("JScrollPaneExemple");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setSize(300,300);

ImageIcon image = new ImageIcon("Fleur.jpg");
JLabel pimage = new JLabel();
pimage.setIcon(image);

JScrollPane jsp = new JScrollPane(pimage);
JViewport jvp = new JViewport();
jvp = jsp.getViewport();
jvp.setViewPosition(new Point(30,200));
f.add(jsp);
}

public static void main(String[] args) {
new JScrollPaneTest();
}
}
Sortie

ajouter image à jscrollpane jviewport

Modifier les paramètres

Si la fenetre est large par exemple, les deux barres disparaissent parce qu'on aura pas besoin. Si vous diminuer la hauteur de la fenêtre, il réapparaissent. Cela est contrôlé par la politique du panneau de défilement pour chaque barre.

JScrollPane a deux constructeurs qui vous donne la main de modifier les paramètres au moment de création:
  • JScrollPane(Composant c, int vertical, int horizontal)
  • JScrollPane(int vertical, int horizontal)
Vous pouvez aussi modifier la politique d'affichage des deux barres après la création avec les deux méthode: setHorizontalScrollBarPolicy()setVerticalScrollBarPolicy().

VERTICAL_SCROLLBAR_AS_NEEDED HORIZONTAL_SCROLLBAR_AS_NEEDED c'est le cas par défaut, les barres de défilement apparaissent et disparaissent selon le besoin.
VERTICAL_SCROLLBAR_ALWAYS HORIZONTAL_SCROLLBAR_ALWAYS Toujours afficher les barres de défilement.
VERTICAL_SCROLLBAR_NEVER HORIZONTAL_SCROLLBAR_NEVER les barres de défilement seront toujours masquées.

L'instruction suivante est ajoutée dans le code du premier exemple de JTextArea juste après la création de JScrollPane:

jsp.setVerticalScrollBarPolicy(jsp.VERTICAL_SCROLLBAR_ALWAYS);
Sortie:

jscrollpane policy always display scroll bars

Références:
Documentation Oracle: JScrollPane
Documentation Oracle: JViewPort
http://www2.htw-dresden.de/~beck/JAVA11/SWING/scrolling.html