有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何刷新自定义jtable模型,该模型扩展AbstractTableModel以在单击按钮时替换值?

如何刷新JTable,以便在单击按钮时显示我将传入的新值

以下是我的自定义JTable模式:

static class MyModel extends AbstractTableModel {
    private final String[] columnNames = {"Last Name", "First Name", "Email Address", "Address", "Age",
            "Residence Type", "District Number", "Gender"};
    private ArrayList<String[]> Data = new ArrayList<>();

    public void AddCSVData(ArrayList<String[]> DataIn) {

        ArrayList<String[]> stringList = DataIn;
        this.Data = stringList;
        this.fireTableDataChanged();

    }

    @Override
    public int getColumnCount() {
        return columnNames.length;// length;
    }

    @Override
    public int getRowCount() {
        return Data.size();
    }

    @Override
    public String getColumnName(int col) {
        return columnNames[col];
    }

    @Override
    public Object getValueAt(int row, int col) {
        return Data.get(row)[col];
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        return false;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        String[][] cells = null;
        cells[rowIndex][columnIndex] = (String) aValue;
        fireTableCellUpdated(rowIndex, columnIndex);
    }
}

这里有一个按钮,单击该按钮时,jtable中的值应该被更新:

ascendingButton = new JButton("Ascending");
    ascendingButton.setBounds(60, 120, 120, 30);
    sidePane.add(ascendingButton);
    ascendingButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            MyProgramUtility hehe = new MyProgramUtility();
            String path = "src\\res\\data.csv";

            try {
                ArrayList<Citizen> array = MyProgramUtility.printNameAscending(MyProgramUtility.readCSV(path), path);


                List<String> strings = array.stream()
                   .map(object -> Objects.toString(object, null))
                   .collect(Collectors.toList());

                ArrayList<String[]> array1 = new ArrayList<>();
                for (String g : strings) {
                    OneRow = g.split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)");
                    Rs.add(OneRow);
                }

                spreadSheet = new JTable(new MyModel());
                spreadSheet.setModel(NewModel);
                ArrayList<String[]> Rs2 = Rs;
                NewModel.AddCSVData(Rs2);
                System.out.println("Rows: " + NewModel.getRowCount());
                System.out.println("Cols: " + NewModel.getColumnCount());

            } catch (FileNotFoundException fileNotFoundException) {
                fileNotFoundException.printStackTrace();
            }


        }

    });
    descendingButton = new JButton("Descending");
    descendingButton.setBounds(200, 120, 120, 30);
    sidePane.add(descendingButton);
    descendingButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String path = "src\\res\\data.csv";

            try {
                ArrayList<Citizen> array = MyProgramUtility.printNameDescending(MyProgramUtility.readCSV(path), path);


                List<String> strings = array.stream()
                        .map(object -> Objects.toString(object, null))
                        .collect(Collectors.toList());

                ArrayList<String[]> array1 = new ArrayList<>();
                for (String g : strings) {
                    OneRow = g.split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)");
                    Rs.add(OneRow);
                }

                ArrayList<String[]> Rs2 = Rs;
                NewModel.AddCSVData(Rs2);
                System.out.println("Rows: " + NewModel.getRowCount());
                System.out.println("Cols: " + NewModel.getColumnCount());

            } catch (FileNotFoundException fileNotFoundException) {
                fileNotFoundException.printStackTrace();
            }
        }
    });

下面是GUI设计的图片

Program User Interface

我尝试了上面的代码,它只打印出终端中的值。它没有像我计划的那样更新JTable。非常感谢你的帮助

Terminal Output


共 (0) 个答案