Java 将arrayList数据加载到JTable中

Java 将arrayList数据加载到JTable中,java,swing,arraylist,jtable,grid-layout,Java,Swing,Arraylist,Jtable,Grid Layout,我正在尝试使用名为FootballClub的方法设置项目,到目前为止一切正常。 但后来我从中创建了一个arrayList,不知何故我找不到一种方法将这些信息存储到JTable中。 问题是我找不到设置固定行数的方法 这是我的密码: 职业英语: import javax.swing.*; import javax.swing.table.*; import java.awt.*; public class startLeague implements LeagueManager{ //setti

我正在尝试使用名为
FootballClub
的方法设置项目,到目前为止一切正常。 但后来我从中创建了一个arrayList,不知何故我找不到一种方法将这些信息存储到JTable中。 问题是我找不到设置固定行数的方法

这是我的密码:

职业英语:

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
    }
    }
足球俱乐部课程:

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;

   }
体育俱乐部课程(摘要):

最后是LeagueManager,它是一个界面:

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

}
import java.util.ArrayList;
公共接口联盟经理{
ArrayList originalLeagueTable=新ArrayList();
足球俱乐部阿森纳=新足球俱乐部(1,“阿森纳”,35,11,2,2,15,30,11,19);
利物浦足球俱乐部=新的足球俱乐部(2,“利物浦”,30,9,3,3,15,34,18,16);
足球俱乐部切尔西=新足球俱乐部(3,“切尔西”,30,9,2,2,15,30,11,19);
足球俱乐部mCity=新足球俱乐部(4,“曼城”,29,9,2,4,15,41,15,26);
足球俱乐部埃弗顿=新的足球俱乐部(5,“埃弗顿”,28,7,1,7,15,23,14,9);
足球俱乐部tot=新足球俱乐部(6,“托特纳姆”,27、8、4、3、15、15、16、-1);
纽卡斯尔足球俱乐部=新的足球俱乐部(7,“纽卡斯尔”,26,8,5,2,15,20,21,-1);
足球俱乐部南部=新足球俱乐部(8,“南安普敦”,23,6,4,5,15,19,14,5);
}
谁能帮帮我吗? 我已经试了好几天了。 多谢各位

“问题是我找不到设置固定行数的方法”

您不需要设置行数。使用
表格模型
。特别是
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);
然后,您可以使用
对象[]

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

tableModel.addRow(objs);
可以循环添加对象[]数组

注意:JTable当前不允许将输入数据实例化为
ArrayList
。它必须是
向量
或数组

见和。而且

“我从中创建了一个arrayList,但不知何故,我找不到将此信息存储到JTable中的方法。”

您可以这样做来添加数据

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

}
ArrayList originalLeagueList=new ArrayList();
新增(新足球俱乐部(1,“阿森纳”,35、11、2、2、15、30、11、19);
新增(新足球俱乐部(2,“利物浦”,30、9、3、3、15、34、18、16);
新增(新足球俱乐部(3,“切尔西”,30、9、2、2、15、30、11、19);
新增(新足球俱乐部(4,“曼城”,29、9、2、4、15、41、15、26);
添加(新足球俱乐部(5,“埃弗顿”,28,7,1,7,15,23,14,9);
新增(新足球俱乐部(6,“托特纳姆”,27、8、4、3、15、15、16、-1);
新增(新足球俱乐部(7,“纽卡斯尔”,26、8、5、2、15、20、21、-1);
新增(新足球俱乐部(8,“南安普敦”,23、6、4、5、15、19、14、5);
对于(int i=0;i
您可能需要使用
表格模型

如何实现自己的
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] ;
  }

}
希望能有帮助

我从中创建了一个arrayList,但不知怎的,我找不到将这些信息存储到JTable中的方法

DefaultTableModel不支持显示存储在ArrayList中的自定义对象。您需要创建一个自定义的TableModel

你可以查一下。它是一个可重用的类,将使用反射查找足球俱乐部类中的所有数据并显示在JTable中


或者,您可以扩展上述链接中的
行表模型
,通过实现一些方法,更容易创建自己的自定义表模型。
JButtomTableModel.java
源代码提供了一个完整的示例,说明了如何执行此操作。

您可以像我对我的列表或任何其他Arraylist所做的那样,键入从另一个名为PingScan的类返回的内容,该类返回List>,因为它实现了服务执行器。不管怎样,代码记录中指出,您可以使用foreach并从列表中检索数据

 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);
                    }
                }
PingScan p=new PingScan();
List scanResult=p.checkThisIP(jFormattedTextField1.getText(),jFormattedTextField2.getText());
对于(最终未来f:scanResult){
试一试{
if(f.get()instanceof String){
字符串ip=f.get();
对象[]数据={ip};
tableModel.addRow(数据);
}
}捕获(InterruptedException | ExecutionException ex){
Logger.getLogger(gui.class.getName()).log(Level.SEVERE,null,ex);
}
}

像我这样的初学者的基本方法

public void loadDataToJtable(ArrayList<String> liste){
        
    rows = table.getRowCount();

    cols = table.getColumnCount();

    for (int i = 0; i < rows ; i++) {

            for ( int k  = 0; k < cols ; k++) {
            
            for (int h = 0; h < list1.size(); h++) {
                
                String b =  list1.get(h);
                b = table.getValueAt(i, k).toString();
                
            }
        }
    }
}
public void loadDataToJtable(ArrayList列表){
rows=table.getRowCount();
cols=table.getColumnCount();
对于(int i=0;i
我不认为JTable将ArrayList作为数据参数。你需要一个向量或一个二维数组所以,currentl
 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);
                    }
                }
public void loadDataToJtable(ArrayList<String> liste){
        
    rows = table.getRowCount();

    cols = table.getColumnCount();

    for (int i = 0; i < rows ; i++) {

            for ( int k  = 0; k < cols ; k++) {
            
            for (int h = 0; h < list1.size(); h++) {
                
                String b =  list1.get(h);
                b = table.getValueAt(i, k).toString();
                
            }
        }
    }
}