Загружать данные массива в JTable

Я пытаюсь установить элементы из метода FootballClub и пока все в порядке. но затем я создал массивList от него, и я как-то не могу найти способ сохранить эту информацию в JTable. Проблема в том, что я не могу найти способ установить фиксированное количество строк

Вот мой код:

Класс 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 Класс:

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

Класс SportsClub (аннотация):

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

И, наконец, LeagueManager, который является интерфейсом:

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

Может кто-нибудь, пожалуйста, помогите мне? Я пытаюсь и стараюсь в течение нескольких дней. Спасибо.

«Проблема в том, что я не могу найти способ установить фиксированное количество строк»

Вам не нужно указывать количество строк. Используйте TableModel . Например, DefaultTableModel .

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

Затем вы можете добавить строки в tableModel с помощью Object[]

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

Вы можете использовать цикл для добавления массивов Object [].

Примечание. JTable в настоящее время не позволяет создавать экземпляры с входными данными как ArrayList . Это должен быть Vector или массив.

См. JTable и DefaultTableModel . Также, как использовать JTable учебник

«Я создал массивList от него, и я как-то не могу найти способ сохранить эту информацию в JTable».

Вы можете сделать что-то подобное, чтобы добавить данные

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

Вероятно, вам нужно использовать TableModel ( учебник Oracle здесь )

Как реализуется ваша собственная 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] ; } } 

Возможно, вам придется переопределить другие методы TableModel , в зависимости от того, что вы хотите сделать, но вот основные методы для понимания и реализации:
Используйте его так

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

Надеюсь, это поможет!

Я создал массивList из него, и я как-то не могу найти способ сохранить эту информацию в JTable.

DefaultTableModel не поддерживает отображение пользовательских объектов, хранящихся в ArrayList. Вам нужно создать пользовательский TableModel.

Вы можете проверить модель Bean Table . Это многоразовый class, который будет использовать reflection, чтобы найти все данные в вашем classе FootballClub и отобразить их в JTable.

Или вы можете расширить Row Table Model найденную в приведенной выше ссылке, чтобы упростить создание собственной пользовательской TableModel, реализовав несколько методов. Исходный код JButtomTableModel.java дает полный пример того, как вы можете это сделать.

Вы можете сделать что-то вроде того, что я сделал с моим List > или любым другим Arraylist, Type, возвращаемым из другого classа PingScan, который возвращает List>, потому что он реализует исполнителя службы. В любом случае, код вниз обратите внимание, что вы можете использовать foreach и извлекать данные из списка .

  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); } } 
  • Доступ к компонентам GUI из другого classа
  • JTable, как работаетEditor
  • Добавляет ли JLabel в JPanel «скрыть» JPanel?
  • Эффект безопасного рабочего режима для Java-приложения
  • Как изменить цвет текста в JtextArea?
  • Центр JDialog над родителем
  • Как установить цвет фона JLabel?
  • Как отключить JTextField
  • Выделяет subString в TableCell (s), который используется для JTable filetering
  • drag and drop jlabel вокруг экрана
  • Показать столбец столбца при перетаскивании столбца
  • Давайте будем гением компьютера.