Я снова возвращаюсь со своими проблемами. Я только начинающий, который изучает код 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);