web-dev-qa-db-fra.com

Charger les données de arrayList dans JTable

J'essaie de définir des éléments à partir d'une méthode appelée FootballClub et jusqu'à présent, tout va bien . Mais j'ai ensuite créé un tableau avec cette liste et je ne parviens pas à trouver un moyen de stocker cette information dans un JTable . le problème est que je ne peux pas trouver un moyen de définir un nombre fixe de lignes

Voici mon code:

Classe StartLeague:

import javax.swing.*;
import javax.swing.table.*;
import Java.awt.*;

public class startLeague implements LeagueManager{

//setting the frame and other components to appear

public startLeague(){
    JButton createTeam = new JButton("Create Team");
    JButton deleteTeam = new JButton("Delete Team");

    JFrame frame = new JFrame("Premier League System");
    JPanel panel = new JPanel();
    frame.setSize(1280, 800);
    frame.setVisible(true);
    frame.add(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    String col[] = {"Pos","Team","P", "W", "L", "D", "MP", "GF", "GA", "Gd"};

    panel.setLayout(new GridLayout(20, 20));
    panel.add(createTeam);
    panel.add(deleteTeam);
    panel.add(new JLabel(""));
    //JLabels to fill the space
    }
    }

FootBall Club Class:

import Java.util.ArrayList;



 public class FootballClub extends SportsClub{





   FootballClub(int position, String name, int points, int wins, int defeats, int draws, int totalMatches, int goalF, int goalA, int goalD){
   this.position = position;
   this.name = name;
   this.points = points;
   this.wins = wins;
   this.defeats = defeats;
   this.draws = draws;
   this.totalMatches = totalMatches;
   this.goalF = goalF;
   this.goalA = goalA;
   this.goalD = goalD;

   }

La classe SportsClub (résumé):

abstract class SportsClub {
int position;
String name;
int points;
int wins;
int defeats;
int draws;
int totalMatches;
int goalF;
int goalA;
int goalD;

}

Et enfin, LeagueManager, qui est une interface:

import Java.util.ArrayList;


public interface LeagueManager {
ArrayList<FootballClub> originalLeagueTable = new ArrayList<FootballClub>();
FootballClub arsenal = new FootballClub(1, "Arsenal", 35, 11, 2, 2, 15, 30, 11, 19);
FootballClub liverpool = new FootballClub(2, "Liverpool", 30, 9, 3, 3, 15, 34, 18, 16);
FootballClub chelsea = new FootballClub(3, "Chelsea", 30, 9, 2, 2, 15, 30, 11, 19);
FootballClub mCity = new FootballClub(4, "Man City", 29, 9, 2, 4, 15, 41, 15, 26);
FootballClub everton = new FootballClub(5, "Everton", 28, 7, 1, 7, 15, 23, 14, 9);
FootballClub tot = new FootballClub(6, "Tottenham", 27, 8, 4, 3, 15, 15, 16, -1);
FootballClub newcastle = new FootballClub(7, "Newcastle", 26, 8, 5, 2, 15, 20, 21, -1);
FootballClub south = new FootballClub(8, "Southampton", 23, 6, 4, 5, 15, 19, 14, 5);

}

Quelqu'un peut-il m'aider s'il vous plaît? J'ai essayé et essayé pendant des jours . Merci.

12
jPratas

"Le problème est que je ne peux pas trouver un moyen de définir un nombre fixe de lignes"

Vous n'avez pas besoin de définir le nombre de lignes. Utilisez une TableModel. Un DefaultTableModel en particulier.

String col[] = {"Pos","Team","P", "W", "L", "D", "MP", "GF", "GA", "Gd"};

DefaultTableModel tableModel = new DefaultTableModel(col, 0);
                                            // The 0 argument is number rows.

JTable table = new JTable(tableModel);

Ensuite, vous pouvez ajouter des lignes à la tableModel avec un Object[]

Object[] objs = {1, "Arsenal", 35, 11, 2, 2, 15, 30, 11, 19};

tableModel.addRow(objs);

Vous pouvez effectuer une boucle pour ajouter vos tableaux Object [].

Remarque: JTable n'autorise pas actuellement l'instanciation avec les données d'entrée en tant que ArrayList. Il doit s'agir d'une Vector ou d'un tableau.

Voir JTable et DefaultTableModel . Aussi, Comment utiliser le tutoriel JTable

"J'ai créé une liste de tableaux à partir de celle-ci et je n'arrive pas à trouver un moyen de stocker cette information dans une table JTable."

Vous pouvez faire quelque chose comme ceci pour ajouter les données

ArrayList<FootballClub> originalLeagueList = new ArrayList<FootballClub>();

originalLeagueList.add(new FootballClub(1, "Arsenal", 35, 11, 2, 2, 15, 30, 11, 19));
originalLeagueList.add(new FootballClub(2, "Liverpool", 30, 9, 3, 3, 15, 34, 18, 16));
originalLeagueList.add(new FootballClub(3, "Chelsea", 30, 9, 2, 2, 15, 30, 11, 19));
originalLeagueList.add(new FootballClub(4, "Man City", 29, 9, 2, 4, 15, 41, 15, 26));
originalLeagueList.add(new FootballClub(5, "Everton", 28, 7, 1, 7, 15, 23, 14, 9));
originalLeagueList.add(new FootballClub(6, "Tottenham", 27, 8, 4, 3, 15, 15, 16, -1));
originalLeagueList.add(new FootballClub(7, "Newcastle", 26, 8, 5, 2, 15, 20, 21, -1));
originalLeagueList.add(new FootballClub(8, "Southampton", 23, 6, 4, 5, 15, 19, 14, 5));

for (int i = 0; i < originalLeagueList.size(); i++){
   int position = originalLeagueList.get(i).getPosition();
   String name = originalLeagueList.get(i).getName();
   int points = originalLeagueList.get(i).getPoinst();
   int wins = originalLeagueList.get(i).getWins();
   int defeats = originalLeagueList.get(i).getDefeats();
   int draws = originalLeagueList.get(i).getDraws();
   int totalMatches = originalLeagueList.get(i).getTotalMathces();
   int goalF = originalLeagueList.get(i).getGoalF();
   int goalA = originalLeagueList.get(i).getGoalA();
   in ttgoalD = originalLeagueList.get(i).getTtgoalD();

   Object[] data = {position, name, points, wins, defeats, draws, 
                               totalMatches, goalF, goalA, ttgoalD};

   tableModel.add(data);

}
20
Paul Samsotha

Vous devrez probablement utiliser une TableModel ( Le tutoriel d’Oracle ici )

Comment implémente votre propre TableModel

public class FootballClubTableModel extends AbstractTableModel {
  private List<FootballClub> clubs ;
  private String[] columns ; 

  public FootBallClubTableModel(List<FootballClub> aClubList){
    super();
    clubs = aClubList ;
    columns = new String[]{"Pos","Team","P", "W", "L", "D", "MP", "GF", "GA", "Gd"};
  }

  // Number of column of your table
  public int getColumnCount() {
    return columns.length ;
  }

  // Number of row of your table
  public int getRowsCount() {
    return clubs.size();
  }

  // The object to render in a cell
  public Object getValueAt(int row, int col) {
    FootballClub club = clubs.get(row);
    switch(col) {
      case 0: return club.getPosition();
      // to complete here...
      default: return null;
    }
  }

  // Optional, the name of your column
  public String getColumnName(int col) {
    return columns[col] ;
  }

}

Vous devrez peut-être remplacer d'autres méthodes de TableModel, cela dépend de ce que vous voulez faire, mais voici les méthodes essentielles pour comprendre et mettre en œuvre :)
Utilisez-le comme ça

List<FootballClub> clubs = getFootballClub();
TableModel model = new FootballClubTableModel(clubs);
JTable table = new JTable(model);

J'espère que ça aide!

9
NiziL

J'ai créé une liste de tableaux à partir de celle-ci et je ne parviens pas à trouver un moyen de stocker ces informations dans un JTable.

DefaultTableModel ne prend pas en charge l'affichage d'objets personnalisés stockés dans une liste de tableaux. Vous devez créer un TableModel personnalisé.

Vous pouvez consulter le modèle de table Bean . C'est une classe réutilisable qui utilisera la réflexion pour trouver toutes les données de votre classe FootballClub et les afficher dans un JTable.

Vous pouvez également étendre le Row Table Model trouvé dans le lien ci-dessus pour faciliter la création de votre propre modèle de table personnalisé en implémentant quelques méthodes. Le code source JButtomTableModel.Java donne un exemple complet de la procédure à suivre.

2
camickr

Vous pouvez faire quelque chose comme ce que j'ai fait avec mon List <Future <String>> ou tout autre Arraylist, Type renvoyé par une autre classe appelée PingScan qui renvoie List> car elle implémente l'exécuteur de service. Quoi qu'il en soit, le code ci-dessous indique que vous pouvez utiliser foreach et récupérer des données à partir de List

 PingScan p = new PingScan();
 List<Future<String>> scanResult = p.checkThisIP(jFormattedTextField1.getText(), jFormattedTextField2.getText());
                for (final Future<String> f : scanResult) {
                    try {
                        if (f.get() instanceof String) {
                            String ip = f.get();
                            Object[] data = {ip};
                            tableModel.addRow(data);
                        }
                    } catch (InterruptedException | ExecutionException ex) {
                        Logger.getLogger(gui.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
0
Abdelsalam Shahlol