使用jtable和jbutton的java搜索arraylist

uklbhaso  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(393)

我有一个保存足球比赛的arraylist,当用户键入日期并按下“搜索”按钮时,一个新的jtable将打开,显示那天进行的所有比赛。我循环获取日期并将其与jtextfield中的输入进行比较,但它只会给我一个空表,即使有用户输入日期的比赛记录。在下面的代码中,我只是在jtextfield上点击enter来执行搜索,因为我不知道如何将jtextfieldMap到jbutton。我试过了,但它只打印了搜索按钮的名称。

  1. public void searchMatch(ArrayList<Matches> searchMatch, String e)
  2. {
  3. DefaultTableModel searchModel = new DefaultTableModel();
  4. for(int i = 0; i < searchMatch.size(); i++)
  5. {
  6. if(searchMatch.get(i).getM_date().equals(e))
  7. {
  8. System.out.println(searchMatch.get(i).getM_date());
  9. String date = searchMatch.get(i).getM_date();
  10. String teamName = searchMatch.get(i).getM_teamName();
  11. String teamName2 = searchMatch.get(i).getM_teamName2();
  12. int goalsScoredTeam1 = searchMatch.get(i).getGoalsTeam1();
  13. int goalsScoredTeam2 = searchMatch.get(i).getGoalsTeam2();
  14. Object[] row = {teamName, teamName2, goalsScoredTeam1, goalsScoredTeam2,date};
  15. searchModel.addRow(row);
  16. JTable searchTable = new JTable(searchModel);
  17. searchTable.setFillsViewportHeight(true);
  18. JPanel searchPanel = new JPanel();
  19. JScrollPane scrollPane = new JScrollPane(searchTable);
  20. searchPanel.add(scrollPane);
  21. JFrame frame = new JFrame("Searched Matches");
  22. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23. searchTable.setOpaque(true);
  24. frame.setContentPane(searchPanel);
  25. frame.pack();
  26. frame.setSize(500, 500);
  27. frame.setVisible(true);
  28. }
  29. }
  30. }
9avjhtql

9avjhtql1#

  1. DefaultTableModel searchModel = new DefaultTableModel();

tablemodel没有要显示的列。
即使添加了数据行,也不能显示任何数据,除非还为tablemodel定义了“列名”。
您的代码应该类似于:

  1. String columnNames = { "Date", "Name", "..." };
  2. DefaultTableModel searchModel = new DefaultTableModel(columnNames, 0);

这将创建一个只包含列名的空tablemodel。然后,循环代码将添加每行数据。
注意,您还应该考虑在tablemodel中存储所有数据,然后只过滤tablemodel。阅读swing教程中有关排序和过滤的部分,了解一个工作示例。

相关问题