使用 JTable 和 JButton 搜索 ArrayList
Searching ArrayList using JTable and JButton
我有一个保存足球比赛的 ArrayList,当用户键入日期并按下“搜索”按钮时,一个新的 JTable 将打开,显示当天进行的所有比赛。我已经循环获取日期并将其与 JTextField 内的输入进行比较,但它只给我一个空的 table 即使在用户输入的日期有比赛记录。在下面的这段代码中,我只是使用在 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);
}
}
}
DefaultTableModel searchModel = new DefaultTableModel();
您的 TableModel 没有可显示的列。
即使您添加了数据行,也可以显示 none 数据,除非您还为 TableModel 定义了“列名”。
你的代码应该是这样的:
String columnNames = { "Date", "Name", "..." };
DefaultTableModel searchModel = new DefaultTableModel(columnNames, 0);
这将创建一个只有列名的空 TableModel。然后,您的循环代码将添加每一行数据。
请注意,您还应该考虑将所有数据存储在您的 TableModel 中,然后只过滤 TableModel。阅读 Swing 教程中关于 Sorting and Filtering 的部分以获得工作示例。
我有一个保存足球比赛的 ArrayList,当用户键入日期并按下“搜索”按钮时,一个新的 JTable 将打开,显示当天进行的所有比赛。我已经循环获取日期并将其与 JTextField 内的输入进行比较,但它只给我一个空的 table 即使在用户输入的日期有比赛记录。在下面的这段代码中,我只是使用在 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);
}
}
}
DefaultTableModel searchModel = new DefaultTableModel();
您的 TableModel 没有可显示的列。
即使您添加了数据行,也可以显示 none 数据,除非您还为 TableModel 定义了“列名”。
你的代码应该是这样的:
String columnNames = { "Date", "Name", "..." };
DefaultTableModel searchModel = new DefaultTableModel(columnNames, 0);
这将创建一个只有列名的空 TableModel。然后,您的循环代码将添加每一行数据。
请注意,您还应该考虑将所有数据存储在您的 TableModel 中,然后只过滤 TableModel。阅读 Swing 教程中关于 Sorting and Filtering 的部分以获得工作示例。