JScrollPane avec Layout null

Signaler
Messages postés
1
Date d'inscription
samedi 27 mars 2021
Statut
Membre
Dernière intervention
27 mars 2021
-
Messages postés
16307
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 avril 2021
-
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

1 réponse

Messages postés
16307
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 avril 2021
2 820
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