当前位置: 首页 > 知识库问答 >
问题:

如何用现有的ArrayList对象填充JTable?

朱毅
2023-03-14

作为一项任务,我被要求制作一个Swing GUI。在第一部分中,我创建了一个ArrayList(F1Driver)对象(Formula1Driver)。目前所需要的是对所述数组列表进行排序,并将其显示为GUI中的jtable。我制作了一个JButton,当按下它时,它应该进行排序和显示。

但是,一旦按下它将只显示表标题而不显示数组列表中的信息,我应该做什么不同的事情呢?我已经在下面包括了GUI类和main类。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Formula1ChampionshipManager formula1ChampionshipManager =new Formula1ChampionshipManager();
        F1ChampionshipGUI guiCode = new F1ChampionshipGUI();
        formula1ChampionshipManager.loadPreviousData();
        String menu ="";
        Scanner input = new Scanner(System.in);
        while (true) {
            System.out.println("Enter required menu value to continue"+             //Allow user to enter the values and use the program
                    "\n1 or AND:Add a new driver."+
                    "\n2 or RMD:Remove a driver."+
                    "\n3 or CDT:Change driver of a team."+
                    "\n4 or DDS:Display the statistics of a driver."+
                    "\n5 or DDT:Display the Formula1 driver table."+
                    "\n6 or ARD:Add the details of completed race."+
                    "\n7 or SCD:Save the current data."+
                    "\n8 or LPD:Load the previous data."+
                    "\n9 or GUI:Access the user interface."+
                    "\n0 or EXT:Exit and terminate the program.");
            menu = input.nextLine();
            if ((menu.equals("1")) || (menu.equalsIgnoreCase("AND"))) {                     //calls each of the methods.
                formula1ChampionshipManager.addDriver();
                System.out.println("New driver has been added.");
            } else if ((menu.equals("2")) || (menu.equalsIgnoreCase("RMD"))) {
                formula1ChampionshipManager.removeDriver();
                System.out.println("The driver has been removed.");
            } else if ((menu.equals("3")) || (menu.equalsIgnoreCase("CTD"))) {
                formula1ChampionshipManager.changeDriver();
                System.out.println("The driver of the team has been changed.");
            } else if ((menu.equals("4")) || (menu.equalsIgnoreCase("DDS"))) {
                formula1ChampionshipManager.displayDriverStats();
                System.out.println("The driver's statistics has been displayed.");
            } else if ((menu.equals("5")) || (menu.equalsIgnoreCase("DDT"))) {
                formula1ChampionshipManager.displayDriverTable();
                System.out.println("The Formula1 driver table has been displayed.");
            } else if ((menu.equals("6")) || (menu.equalsIgnoreCase("ARD"))) {
                formula1ChampionshipManager.addRaceDetails();
                System.out.println("The details of the completed race has been added..");
            } else if ((menu.equals("7")) || (menu.equalsIgnoreCase("SCD"))) {
                formula1ChampionshipManager.saveCurrentData();
                System.out.println("All current data has been saved to file.");
            } else if ((menu.equals("8")) || (menu.equalsIgnoreCase("LPD"))) {
                formula1ChampionshipManager.loadPreviousData();
                System.out.println("All previous data has been loaded from file.");
            }else if ((menu.equals("9")) || (menu.equalsIgnoreCase("GUI"))) {
                guiCode.gui();
                System.out.println("The user interface has been opened.");
            } else if ((menu.equals("0")) || (menu.equalsIgnoreCase("EXT"))) {
                System.out.println("Manager program has been terminated.");
                break;
            }
        }

    }
}
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.JTextComponent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Vector;

public class F1ChampionshipGUI extends Formula1ChampionshipManager {
    DefaultTableModel tModel;
    JTable table;

    public void gui() {
        JFrame frame = new JFrame("F1 Championship Manager Interface");
        JPanel panel1 = new JPanel();
        panel1.setBounds(0,0,550,500);
        JLabel descendPointTable = new JLabel("Display the drivers in descending order of points:");
        descendPointTable.setBounds(50, 50, 400, 30);
        JButton ascendBtn = new JButton("Display");
        ascendBtn.setBounds(400, 50, 80, 30);

        frame.add(descendPointTable);
        frame.add(ascendBtn);
        frame.setSize(550, 500);
        frame.setLayout(null);
        frame.setVisible(true);

        ascendBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < f1Driver.size() - 1; i++) {
                    for (int j = 0; j < f1Driver.size() - 1 - i; j++) {
                        if ((f1Driver.get(j).compareTo(f1Driver.get(j + 1))) < 0) {
                            Formula1Driver tempDriver = f1Driver.get(j + 1);
                            f1Driver.set(j + 1, f1Driver.get(j));
                            f1Driver.set(j, tempDriver);
                        }
                    }
                }

//                JTable table=new JTable();
//                table.setModel(new javax.swing.table.DefaultTableModel(new Object[][]{},new String[]{"Name","Team","Location","1st positions","2nd positions","3rd positions","Races participated","Current points"}));
////                addToTable();
//
//                public static void addToTable(ArrayList<Formula1Driver> ,JTable table){


                JFrame fDescend = new JFrame();
                tModel = new DefaultTableModel(0, 0);
                table = new JTable(tModel);
                fDescend.setSize(1500, 400);
                fDescend.setVisible(true);

                String[] statFields = {"Name", "Team", "Location", "First positions", "Second positions", "Third positions", "Races participated", "Points"};
//                int driversCount = 0;
//                for (int a=0;a<f1Driver.size();a++){
//                    driversCount++;
//                }

                tModel.setColumnIdentifiers(statFields);
                table.setModel(tModel);
                table.setBounds(0, 500, 1200, 500);
                table.setOpaque(true);
                for (int b = 0; b < f1Driver.size(); b++) {
                    Object[] stats = new Object[]{

                            f1Driver.get(b).getDriverName(),
                            f1Driver.get(b).getDriverTeam(),
                            f1Driver.get(b).getDriverLocation(),
                            f1Driver.get(b).getFirstPositions(),
                            f1Driver.get(b).getSecondPositions(),
                            f1Driver.get(b).getThirdPositions(),
                            f1Driver.get(b).getRacesParticipated(),
                            f1Driver.get(b).getPoints(),

                    };
                    tModel.addRow(stats);
                }

//        for(int x=0;x<f1Driver.size();x++) {
//        Vector<Object> data = new Vector<Object>();
//
//
//            data.addElement(f1Driver.get(x).getDriverName());
//            data.addElement(f1Driver.get(x).getDriverTeam());
//            data.addElement(f1Driver.get(x).getDriverLocation());
//            tModel.addRow(data);
//        }
//

                JScrollPane scrollPane = new JScrollPane(table);
                scrollPane.setBounds(0, 500, 1200, 500);
                panel1.add(scrollPane);
                fDescend.add(panel1);

            }
        });
    }
}

暂时还没有答案

 类似资料:
  • 问题内容: 我有抽象类Human,这是另外两个类Student和Worker的延伸。我正在尝试填写两个数组列表。类型为Student的ArrayList和类型为Worker的ArrayList动态。 } } } } 问题答案: 当然,只需添加学生: 您可以为工人做几乎完全相同的事情。如果要使用循环,请执行以下操作: 这将创建一个新学生列表,其姓名后面有不同的编号。但是,如果您需要其他数据,则该数据

  • 问题内容: 我使用Json.Net这样填充一个类: 上面的结果JSON字符串填充了我的类中的几个属性。稍后我有一个新的JSON字符串,并希望使用其余属性填充相同的类。是否可以使用JSON.NET或方法?我基本上想在上面的代码行中添加/添加到我填充的帐户对象中。 我的课: 问题答案: 是的,您可以使用第二个JSON字符串来填充现有对象的属性。 这是一个例子: 输出: 小提琴:https : //do

  • 问题内容: 根据http://www.newtonsoft.com/json/help/html/PopulateObject.htm,您可以通过JSON字符串中定义的值来更新现有实例。我的问题是,我必须填充该对象的数据已经被解析为JToken对象。我当前的方法如下所示: 是否有更好的方法来完成此任务,而不必首先还原在创建JToken时已经完成的解析? 问题答案: 使用阅读器并将其传递给。返回的阅

  • 我有一个要填充信息的对象。我从许多不同的服务中检索信息。我做了一个助手类,它有一个公共方法,然后有许多私有方法来调用服务。我写的东西很好,但我不确定这是否是正确的方法。 您可能想知道为什么我需要一个包含所有这些信息的对象。我需要它全部在一个对象中,因为我从这个java对象创建了一个json对象并将其传递给javascript层。 我的方法有什么问题?我是否应该遵循一种编程范式来做这样的事情? 例子

  • 问题内容: 我需要用ArrayList填充JComboBox。有什么办法吗? 问题答案: 使用ArrayList类的方法并将其传递给 有关更多信息,请参见JavaDoc和教程。

  • 问题内容: 我必须创建一个大小未知的二维数组。因此,我决定使用2d ArrayList,问题是我不确定如何初始化这样的数组或存储信息。 说我有以下数据 .... etc多达大量的随机连接 我想插入 数组可以自动为我更新列/行吗 任何帮助表示赞赏,谢谢 问题答案: 我不确定如何初始化这样的数组或存储信息。 像这样: 或者,如果您喜欢这样的话: 要插入新行,您可以 并在您执行的操作上附加另一个元素 这