Carica i dati di arrayList in JTable

Sto provando a impostare elementi da un metodo chiamato FootballClub e finora va bene. ma poi ho creato un arraylist da esso e in qualche modo non riesco a trovare un modo per archiviare queste informazioni in un JTable. Il problema è che non riesco a trovare un modo per impostare un numero fisso di righe

Ecco il mio codice:

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 } } 

Classe Club FootBall:

 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 class SportsClub (estratto):

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

E infine, LeagueManager, che è un’interfaccia:

 import java.util.ArrayList; public interface LeagueManager { ArrayList originalLeagueTable = new ArrayList(); 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); } 

Qualcuno può aiutarmi? Ci provo e ci provo da giorni. Grazie.

“Il problema è che non riesco a trovare un modo per impostare un numero fisso di righe”

Non è necessario impostare il numero di righe. Usa un TableModel da TableModel . Un DefaultTableModel in particolare.

 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); 

Quindi puoi aggiungere righe a tableModel con un Object[]

 Object[] objs = {1, "Arsenal", 35, 11, 2, 2, 15, 30, 11, 19}; tableModel.addRow(objs); 

È ansible eseguire il loop per aggiungere gli array Object [].

Nota: JTable attualmente non consente la creazione di istanze con i dati di input come ArrayList . Deve essere un Vector o un array.

Vedi JTable e DefaultTableModel . Inoltre, Come usare il tutorial di JTable

“Ho creato un arraylist da esso e in qualche modo non riesco a trovare un modo per memorizzare queste informazioni in un JTable.”

Puoi fare qualcosa di simile per aggiungere i dati

 ArrayList originalLeagueList = new ArrayList(); 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); } 

Probabilmente hai bisogno di usare un TableModel ( il tutorial di Oracle qui )

Come implementa il tuo TableModel

 public class FootballClubTableModel extends AbstractTableModel { private List clubs ; private String[] columns ; public FootBallClubTableModel(List 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] ; } } 

Forse hai bisogno di sovrascrivere i metodi anothers di TableModel , dipende da cosa vuoi fare, ma ecco i metodi essenziali per capire e implementare 🙂
Usalo in questo modo

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

Spero che aiuti!

Ho creato un arrayList da esso e in qualche modo non riesco a trovare un modo per memorizzare queste informazioni in un JTable.

DefaultTableModel non supporta la visualizzazione di oggetti personalizzati memorizzati in ArrayList. È necessario creare un modello TableModel personalizzato.

È ansible controllare il modello di tabella dei fagioli . È una class riutilizzabile che utilizzerà la riflessione per trovare tutti i dati nella class FootballClub e visualizzarli in una tabella.

In alternativa, è ansible estendere il Row Table Model delle righe nel collegamento sopra riportato per rendere più semplice la creazione del proprio TableModel personalizzato implementando alcuni metodi. Il codice sorgente di JButtomTableModel.java fornisce un esempio completo di come è ansible farlo.

Puoi fare qualcosa come quello che ho fatto con la mia lista > o qualsiasi altro Arraylist, Tipo restituito da un’altra class chiamata PingScan che restituisce Elenco> perché implementa il servizio executor. Ad ogni modo la nota del codice che è ansible utilizzare per recuperare e recuperare i dati dalla lista .

  PingScan p = new PingScan(); List> scanResult = p.checkThisIP(jFormattedTextField1.getText(), jFormattedTextField2.getText()); for (final Future 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); } }