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设计的图片
我尝试了上面的代码,它只打印出终端中的值。它没有像我计划的那样更新JTable。非常感谢你的帮助
共 (0) 个答案