【问题标题】:Searching ArrayList using JTable and JButton使用 JTable 和 JButton 搜索 ArrayList
【发布时间】:2021-03-04 02:56:03
【问题描述】:

我有一个保存足球比赛的 ArrayList,当用户输入日期并按下“搜索”按钮时,会打开一个新的 JTable,显示当天进行的所有比赛。我已经循环获取日期并将其与 JTextField 中的输入进行比较,但即使在用户输入的日期有比赛记录,它也只会给我一个空表。在下面的这段代码中,我只是使用 JTextField 上的回车键来执行搜索,因为我不知道如何将 JTextField 映射到 JButton。我试过了,但它只是打印搜索 Jbutton 名称。

 public void searchMatch(ArrayList<Matches> searchMatch, String e)
{
    DefaultTableModel searchModel = new DefaultTableModel();
    for(int i = 0; i < searchMatch.size(); i++)
    {
        if(searchMatch.get(i).getM_date().equals(e))
        {
            System.out.println(searchMatch.get(i).getM_date());
            String date = searchMatch.get(i).getM_date();
            String teamName = searchMatch.get(i).getM_teamName();
            String teamName2 = searchMatch.get(i).getM_teamName2();
            int goalsScoredTeam1 = searchMatch.get(i).getGoalsTeam1();
            int goalsScoredTeam2 = searchMatch.get(i).getGoalsTeam2();

            Object[] row = {teamName, teamName2, goalsScoredTeam1, goalsScoredTeam2,date};
            searchModel.addRow(row);

            JTable searchTable = new JTable(searchModel);
            searchTable.setFillsViewportHeight(true);
            JPanel searchPanel = new JPanel();
            JScrollPane scrollPane = new JScrollPane(searchTable);
            searchPanel.add(scrollPane);

            JFrame frame = new JFrame("Searched Matches");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            searchTable.setOpaque(true);
            frame.setContentPane(searchPanel);

            frame.pack();
            frame.setSize(500, 500);
            frame.setVisible(true);
        }
    }

}

【问题讨论】:

    标签: java swing arraylist jtable defaulttablemodel


    【解决方案1】:
    DefaultTableModel searchModel = new DefaultTableModel();
    

    您的 TableModel 没有要显示的列。

    即使您添加了数据行,也无法显示任何数据,除非您还为 TableModel 定义了“列名”。

    你的代码应该是这样的:

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

    这将创建一个只有列名的空 TableModel。然后,您的循环代码将添加每一行数据。

    注意,您还应该考虑将所有数据存储在 TableModel 中,然后过滤 TableModel。请阅读 Sorting and Filtering 上的 Swing 教程中的部分以获取工作示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 2020-10-12
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 2012-02-01
      相关资源
      最近更新 更多