JFileChooserから選択したファイルに関する情報を表示するためにJTableを使用しています。[アップロード]ボタンをクリックすると、実際のアップロードはテーブルから選択したファイルを取得することから始まり、対応するファイルのJTableでファイルのアップロードステータスを更新しようとします。ここで、ファイルのアップロードの進行中にJTableのステータスフィールドの値を更新しようとすると、数回だけ更新されます.0から始まり、直接100を更新していますが、他の進行状況の値を表示できません。次のコードをご覧ください。
私のテーブルコード:
uploadTableModel = new UploadTabModel();
uploadTable = new JTable(uploadTableModel);
uploadTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
uploadTable.setAutoCreateRowSorter(false);
uploadTable.setShowGrid(false);
uploadTable.setVisible(true);
JScrollPane tablePane = new JScrollPane();
tablePane.setViewportView(uploadTable);
私のテーブルモデル:
public class UploadTabModel extends AbstractTableModel {
private List<String> names = new ArrayList<String>();
private List<FileDTO> data = new ArrayList<FileDTO>();
public CMUploadTabModel() {
names.add("Name");
names.add("Size");
names.add("Status");
}
private static final long serialVersionUID = 3151839788636790436L;
@Override
public int getColumnCount() {
return names.size();
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getValueAt(int row, int col) {
FileDTO file = data.get(row);
switch (col) {
case 0:
return file.getFileName();
case 1:
return file.getSize();
case 2:
return file.getStatus();
}
return file.getFileName();
}
@Override
public void setValueAt(Object arg0, int rowIndex, int columnIndex) {
FileDTO file = data.get(rowIndex);
switch (columnIndex) {
case 2:
file.setStatus((Integer) arg0);
break;
}
}
public void addRow(FileDTO file) {
this.data.add(file);
this.fireTableRowsInserted(data.size() - 1, data.size() - 1);
}
public String getColumnName(int columnIndex) {
return names.get(columnIndex);
}
@Override
public Class<?> getColumnClass(int index) {
return getValueAt(0, index).getClass();
}
public void updateProgress(int index, final int percentage) {
FileDTO file = data.get(index);
file.setStatus(percentage);
data.set(0, file);
setValueAt(percentage, index, 2);
fireTableRowsUpdated(index, 2);
}
}
私のファイルモデルコンポーネント:
public class FileDTO {
private String fileName;
private Long size;
private Integer status =0;
public FileDTO(File file) {
this.fileName = file.getName();
this.size = file.length();
}
//setters & getters
アップロードからテーブルを更新するハンドラー:
handler = new IProgressHandler() {
@Override
public void update(int index, int percentage) {
uploadTableModel.updateProgress(index,percentage);
}
};
これを達成するために私に親切に提案してください。