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