Как получить значение последней ячейки в JTable?

У меня есть запрос... код работает нормально, но я не могу получить значение последней ячейки последней строки и последнего столбца. Ниже приведен код... пожалуйста, руководство

с помощью этого кода я динамически добавляю строки в JTable: if(e.getSource()==addb) {

        model.addRow(new Object[3]);
        repaint();

    }

Ниже приведен код для получения значений из строки JTable, а позже вместо System.out.println() я собираюсь отправить данные в базу данных...

if(e.getSource()==submit)
    {
        int j = table.getRowCount();
        for(int row=1;row<j;row++)
        {
            for(int column=0;column<3;column++)
            {
                System.out.println("row  "+row+"   Column is  "+column);                    
                System.out.println(model.getValueAt(row, column));
            }
        }

    }

person shounak    schedule 23.02.2013    source источник
comment
1. все зависит от вашего XxxTableModel, для лучшей помощи скорее опубликуйте SSCCE, короткий, исполняемый, компилируемый, примерно JTable и ваш XxxTableModel, 2. без какого-либо запроса (жестко прописать, что локальная переменная == какой-то тип массива), 3. один и тот же или похожий вопрос задается 2-3 раза в день   -  person mKorbel    schedule 23.02.2013
comment
Сначала вам нужно определить, что такое последняя ячейка. Является ли он последним в представлении (которое может быть отсортировано и отфильтровано с переупорядочением столбцов) или последним в модели?   -  person JB Nizet    schedule 23.02.2013
comment
@JB Nizet: это последняя ячейка в последней строке. Динамически добавляю строки в модель. и какое бы количество строк я ни добавил... я сталкиваюсь с этой проблемой только в последней ячейке последней строки.   -  person shounak    schedule 24.02.2013


Ответы (3)


Что-то вроде этого :

int i= table1.getRowCount()-1;
int j= table1.getColumnCount();
Object [] value = new Object[j];
for(int k = 0 ; k<j ; k++)
{
value[k] = model.getValueAt(i,k);
}   

Также см. этот небольшой пример

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TableTest extends JFrame implements ActionListener{

    JTable table ;
    JButton button;
    public TableTest(){
        String []colNames = {"Subject","lecturer"}; 
        String [][] rowDatas = { {"Java Programming","Jon"},
                                 {"C++ Programming","Nuhara"},
                                 {"Mathematicz","Mike"},
                                 {"Database","Saran"}
                                };
        table = new JTable(rowDatas,colNames);

        button = new JButton("Show Last Record");
        button.addActionListener(this);

        this.add(table);
        this.add(button);
        this.setVisible(true);
        this.setSize(300,200);
        this.setDefaultCloseOperation(3);
        this.setLayout(new FlowLayout());
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        int i= table.getRowCount()-1;
        int j= table.getColumnCount();
        Object [] value = new Object[j];
        for(int k = 0 ; k<j ; k++)
        {
        //value[k] = table.getValueAt(i,k);
            System.out.println(table.getValueAt(i, k));
        }  
    }


    public static void main(String...ag){
        new TableTest();
    }
}
person Azad    schedule 23.02.2013
comment
Это не работает. Я все еще получаю значение последней ячейки «ноль»! Спасибо за попытку. - person shounak; 24.02.2013
comment
вы можете попробовать value[k] = table.getValueAt(i,k); - person Azad; 24.02.2013
comment
спасибо за ваши усилия, но это все еще не работает. Я устал от этого сейчас ... расстраиваюсь! Я не понимаю, что происходит с кодом..... если эта штука не сработает к 2-м завтра, я буду использовать другой способ... я оставлю всю последнюю строку редактируемой (false) и не буду рассматривать эту строку вообще... я знаю, что это неправильный способ пройти через это... но я не вижу никаких надежд сейчас..! еще раз спасибо за ваши усилия! - person shounak; 25.02.2013
comment
Пожалуйста, смотрите, я отредактировал свой ответ. кстати, у вас, вероятно, есть ошибка в вашей таблице, если только я не использовал ту же функцию для получения последнего значения, и она работает. см. пример, надеюсь, он будет полезен. - person Azad; 25.02.2013

Делая дикое предположение, что вы редактируете последнюю ячейку, когда вы нажимаете кнопку «Отправить».

Если да, то см.: Редактирование остановки таблицы.

person camickr    schedule 23.02.2013
comment
на самом деле я добавляю пустые строки через addb actiolistener, а затем редактирую ячейки с требуемыми значениями, а затем с помощью submit actionlistener отправляю данные из всех отредактированных ячеек в базу данных... но, к сожалению, каждый раз ма получаю значение последней ячейки как нулевое. не понимаю, почему это происходит. - person shounak; 24.02.2013
comment
Вы читали ссылку, которую я вам дал? Если это не проблема, вам нужно опубликовать SSCCE. - person camickr; 24.02.2013

Спасибо, Азад,
Теперь все работает превосходно...
Я немного отредактировал код, чтобы получить данные из всех строк...

 int i= table.getRowCount()-1;
        int j= table.getColumnCount();

        for (int d=1;d<i+1;d++){   // will provide row wise data
        for(int k = 0 ; k<j ; k++)  // will provide column wise data
        {
          System.out.println("row num   "+d+"   "+model.getValueAt(d,k));
        }   }
person shounak    schedule 02.03.2013