计算JTable中所选单元格的值之和

时间:2018-09-04 07:09:39

标签: java swing jtable

我再次遇到问题。我只是一个学习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);

1 个答案:

答案 0 :(得分:0)

关于我的问题的总结,我尝试对JTable中选定框的值求和。如果单击第一个框,则仅显示其值。如果我单击第二个框,其值将添加到第一个框的值,依此类推。另一方面,如果取消选择一个框,则其值在现有总数中会减小。 我想要一个喜欢Excel的罐子。