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.
"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);
}
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!
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.
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);
}
}