JScrollPane avec Layout null

Fermé
adrien1904 Messages postés 1 Date d'inscription samedi 27 mars 2021 Statut Membre Dernière intervention 27 mars 2021 - Modifié le 27 mars 2021 à 16:14
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 28 mars 2021 à 09:57
Bonjour,
pour un projet d'Algo je dois réaliser une interface en java.
Je souhaiterai afficher une liste de "carte" (des JPanel colorés) et pouvoir scroller dans cette liste lorsque le nombre de carte fait que les suivantes ne sont pas visibles :


(ici on voit que la dernière carte est coupée et il y peut en avoir d'autres en dessous).

J'ai donc découvert qu'il faut utiliser un JScrollPane mais apparemment cela ne marche pas avec un Layout(null) or c'est ce que nous utilisons en cours...
Voici mon code :

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class FenetrePrincipale extends JFrame implements ActionListener, MouseListener{

  LinkedList<Carte> cartesFidelite; //Liste des cartes
  
  JPanel conteneurCarte;
  JPanel monConteneurMain;
  JScrollPane scrollPane;

  public FenetrePrincipale(LinkedList<Carte> c){
    cartesFidelite=c; //List of cards

    //Window
    setTitle("Gestionnaire de cartes");
    setBounds(0, 0, 1195, 722);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);

    //CONTAINER Main
    containerMain = new JPanel();
    containerMain.setLayout(null);
    containerMain.setBackground(Color.white);

    //CONTAINER Liste de cartes
    conteneurCarte = new JPanel();
    conteneurCarte.setLayout(null);
    conteneurCarte.setBackground(new Color(242,242,242));
    conteneurCarte.setBorder(BorderFactory.createLineBorder(new Color(199,199,199)));
  
    scrollPane = new JScrollPane(conteneurCarte);
    scrollPane.setBounds(34, 90, 377,550);
    containerMain.add(scrollPane);

    //Affichage de la fenetre
    this.add(monConteneurMain);
    this.setVisible(true);

    //Affichage des cartes
    refreshListCard();
   
}


et la methode qui affiche les cartes :

public void refreshListCard (){
conteneurCarte.removeAll();
  int i = 0;
  for(Carte e : cartesFidelite){
    e.setLocation(15,(15+i*(172+15)));
    conteneurCarte.add(e);
    e.addMouseListener(this);
    i++;
  }
  conteneurCarte.updateUI();
}


et la méthode main si besoin :
 public static void main(String[] args){
  LinkedList<Carte> ListeCarte = new LinkedList<Carte>();
  Carte cartesDeFidelite1= new Carte("Nom","Prenom","Nom Magasin",100,123,Color.black);
  Carte cartesDeFidelite2= new Carte("DUPONT","Jean","Auchan",1034,123,new Color(255,103,103));
  Carte cartesDeFidelite3= new Carte("DURANT","Adrien","Decathlon",500,123,new Color(103,144,255));
  ListeCarte.add(cartesDeFidelite3);
  ListeCarte.add(cartesDeFidelite2);
  ListeCarte.add(cartesDeFidelite1);

  FenetrePrincipale gestionnaireCarte = new FenetrePrincipale(ListeCarte);
   }



Est-ce que quelqu'un aurait une idée pour résoudre mon problème ?
Merci beaucoup pour votre aide.
Adrien

Configuration: Macintosh / Firefox 86.0
A voir également:

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
28 mars 2021 à 09:57
Bonjour,

"J'ai donc découvert qu'il faut utiliser un JScrollPane mais apparemment cela ne marche pas avec un Layout(null) or c'est ce que nous utilisons en cours"
On ne peut pas réduire un langage informatique aux seules fonctionnalités autorisées en cours.
Il va donc falloir faire un choix : avoir un programme qui ne fait pas ce que tu veux ou aller au delà du cours.

Remarque : Swing n'est plus maintenu depuis la sortie de Java 8 en 2014, la technologie recommandée pour faire des applications de bureau est désormais JavaFX
0