我再次遇到问题。我只是一个学习Java代码的初学者。
我有一个JTable
,可以显示数据库中的数据。我想对表格的几个单元格(通过选择行)执行计算。
我希望能够增加或减少目标单元格的值,具体取决于表中是选择还是取消选择了行。
为实现这一点,我创建了一个变量,使我可以存储所选单元格的值之和。然后,我用MouseEvent
听了一行的点击。最后,我通过getValuesAt()
方法获得了所选行(目标单元格)的值。
当前,此代码允许我通过单击一行进行总结。但是他只计算选定的行;相反,它是新选择的现有值的总和。我不知道如何编写只允许我选择的行的代码。
这是我的代码:
显示数据:
public void remplirTableau(){
MetierImpl metier=new MetierImpl();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String codeCli=cmbCodeCli.getSelectedItem().toString();
List<Echeancier> opss=metier.consulterEcheancierNonRembourser(codeCli);
model = new DefaultTableModel(){
@Override
public boolean isCellEditable(int iRowIndex, int iColumnIndex)
{
return false;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex==1 || columnIndex==2 || columnIndex==3) {
return Object.class; // le type des données de la première colonne
}else{
return Double.class;
}
}
};
model.setColumnIdentifiers(new Object[]{"Ref","Date prévu","Date réalisé","Dégré","Capital","Amortis","Interet","Epargne","Echeance"});
Object[] row = new Object[9];
for(Echeancier cl:opss){
row[0] = cl.getIdEch();
row[1] = sdf.format(cl.getDateEch());
if(cl.getDateR()!=null){
row[2] = sdf.format(cl.getDateR());
}else{
row[2] = cl.getDateR();
}
row[3] = cl.getNumEch();
row[4] = cl.getCapital();
row[5] = cl.getAmorti();
row[6] = cl.getInteret();
row[7] = cl.getEpargne();
row[8] = cl.getEcheance();
model.addRow(row);
}
table.setModel(model);
}
要听点击并做数学运算:
private double valeur=0;
private void maybeShowPopup(MouseEvent e) {
int row=table.getSelectedRow();
MetierImpl metier=new MetierImpl();
//double valeur=0;
try {
if (e.getClickCount()==1) {
for (int i = 0; i < table.getRowCount(); i++) {
valeur+=(double)(table.getModel().getValueAt(row, 5));
}
}
System.out.println(valeur);
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "Veuillez selectionné la ligne concernée.");
}
}
在JTable
,我这样做了:
table = new JTable();
/**
* Cette action permet de faire une action sur un Jtable
*/
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
});
scrollPane.setViewportView(table);
答案 0 :(得分:0)