Java JTable fireDataChanged复制单元格值
我试图寻找答案,但我从未发现有人有这个问题 基本上发生的是,应该显示我的对象的JTable正在将最后一个单元格值的值复制到之前的单元格中 更具体地说,我有一个名为“Artikl”的对象列表。Artikl有4个值,我想在表中显示,字符串naziv、字符串drzava、Int kolicina和Float cijena 假设这些变量的值是Java JTable fireDataChanged复制单元格值,java,swing,list,jtable,abstracttablemodel,Java,Swing,List,Jtable,Abstracttablemodel,我试图寻找答案,但我从未发现有人有这个问题 基本上发生的是,应该显示我的对象的JTable正在将最后一个单元格值的值复制到之前的单元格中 更具体地说,我有一个名为“Artikl”的对象列表。Artikl有4个值,我想在表中显示,字符串naziv、字符串drzava、Int kolicina和Float cijena 假设这些变量的值是naziv=“x”,drzava=“y”,kolicina=2,cijena=100 将值添加到对象Artikl,然后将对象添加到列表中时,一切正常,值与它们应该的
naziv=“x”
,drzava=“y”
,kolicina=2
,cijena=100
将值添加到对象Artikl,然后将对象添加到列表中时,一切正常,值与它们应该的一样
当我使用artiklModel.fireDataChanged()时会出现问题代码>
表中显示的值为naziv=“x”
,drzava=“y”
,kolicina=100
,cijena=100
我已经调试了2天,找不到原因。
我将在下面附上必要的代码(由于这是一个大学项目,我不能再添加更多)
这是我的桌面模型:
public class ArtiklModel extends AbstractTableModel{
private static final int COLUMN_NAZIV = 0;
private static final int COLUMN_DRZAVA = 1;
private static final int COLUMN_KOLICINA = 2;
private static final int COLUMN_CIJENA = 3;
private List<Artikl> listArtikl;
private String[] columnNames;
public ArtiklModel() {
// initializes contact list
this.listArtikl = new ArrayList<Artikl>();
// define column names
columnNames = new String[] {"Naziv",
"Država","Količina", "Cijena"};
}
@Override
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getRowCount() {
return listArtikl.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
Artikl artikl = listArtikl.get(rowIndex);
switch (columnIndex) {
case COLUMN_NAZIV:
value = artikl.getNaziv();
break;
case COLUMN_DRZAVA:
value = artikl.getPorijeklo();
break;
case COLUMN_KOLICINA:
value = artikl.getKolicina();
case COLUMN_CIJENA:
value = artikl.getCijena();
break;
}
return value;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public void addArtikl(Artikl novi) {
this.listArtikl.add(novi);
}
public void removeArtikl(int rowIndex) {
this.listArtikl.remove(rowIndex);
}
public List<Artikl> getArtikli(){
return listArtikl;
}
}
表单有用于添加值的文本框和组合框,当我单击按钮时,这些值应添加到列表中,然后显示在表中:
btnDodajArtikl.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent arg0) {
inHelper.DodajUTablicu(txtKolicina.getText(), txtNaziv.getText(), txtPojedinacnaCijena.getText(), cboDrzava.getSelectedItem().toString(), model1);
txtKolicina.setText("");
txtNaziv.setText("");
txtPojedinacnaCijena.setText("");
model1.fireDataChanged();
}
}
});
public void DodajUTablicu(String kolicina, String naziv, String cijena, String drzava, ArtiklModel artiklModel){
Artikl artikl = new Artikl();
artikl.setKolicina(Integer.parseInt(kolicina));
artikl.setCijena(Float.parseFloat(cijena));
artikl.setDrzava(drzava);
artikl.setRbr(rbr);
artikl.setNaziv(naziv);
artiklModel.addArtikl(artikl);
rbr++;
}
下一部分在另一个类中,我使用它更新列表并在表中显示结果:
btnDodajArtikl.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent arg0) {
inHelper.DodajUTablicu(txtKolicina.getText(), txtNaziv.getText(), txtPojedinacnaCijena.getText(), cboDrzava.getSelectedItem().toString(), model1);
txtKolicina.setText("");
txtNaziv.setText("");
txtPojedinacnaCijena.setText("");
model1.fireDataChanged();
}
}
});
public void DodajUTablicu(String kolicina, String naziv, String cijena, String drzava, ArtiklModel artiklModel){
Artikl artikl = new Artikl();
artikl.setKolicina(Integer.parseInt(kolicina));
artikl.setCijena(Float.parseFloat(cijena));
artikl.setDrzava(drzava);
artikl.setRbr(rbr);
artikl.setNaziv(naziv);
artiklModel.addArtikl(artikl);
rbr++;
}
有人知道吗?我慢慢疯了。在您的切换声明中:
case COLUMN_KOLICINA:
value = artikl.getKolicina();
case COLUMN_CIJENA:
value = artikl.getCijena();
break;
有一个中断代码>缺失,因此对于case列_KOLICINA
行value=artikl.getCijena()
也会执行
case COLUMN_KOLICINA:
value = artikl.getKolicina();
break; // THIS LINE MISSING
case COLUMN_CIJENA:
value = artikl.getCijena();
break;
1.出于原因,有两个数组Artikl
和XxxTableModel
,2。覆盖AbstractTableModel
中的getColumnClass
,以便在JTables视图中正确呈现,3。您的模型尚未完成,您需要使用适当的通知程序fireXxxXxx 4覆盖setValueAt。将适当的通知程序设置为添加/删除Artikl,5。为了获得更好的帮助,请尽快发布一个SSCCE
/MCVE
,简短、可运行、可编译,请查看我对OP的评论中的第2点和第4点,否则JTables视图中不会绘制任何内容,也不会correctly@mKorbel是的,也是这样。我以为OP是故意漏掉的。谢谢你,我差点把笔记本电脑扔出窗外。是的,我故意漏掉了一些代码,那些我认为与问题无关的部分。@mercin,不客气。如果这解决了您的问题,请将其标记为已解决(答案左侧的钩子),因此此问题标记为已解决。