2013-02-23 91 views
0

我有一個查詢...代碼運行良好,但無法獲取最後一行和最後一列的最後一個單元格的值。下面是代碼...請指導如何獲取JTable中Last cell的值?

與此代碼我動態地添加行的JTable: 如果(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)); 
      } 
     } 

    } 
+3

1.一切都取決於你的'XxxTableModel的',爲了更好地幫助發佈一個[SSCCE](http://sscce.org/),簡短,可運行,可編譯,就像'JTable'和你的'XxxTableModel'一樣,2.沒有任何查詢(硬編碼作爲局部變量==某種類型的數組),3.每天要問2-3次相同或相似的問題 – mKorbel 2013-02-23 15:34:17

+0

您首先需要定義最後一個單元格是什麼。它是視圖中的最後一個(它可能被排序和過濾,列重新排序),還是模型中的最後一個? – 2013-02-23 15:58:47

+0

@JB Nizet:單元格是最後一行中的最後一個單元格。我在模型中動態添加行。以及無論我可以添加多少行......我只在最後一行的最後一個單元中遇到這個問題。 – shounak 2013-02-24 03:01:33

回答

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(); 
    } 
} 
+0

這不起作用。我仍然獲得最後一個單元格的值'null'!感謝給予嘗試。 – shounak 2013-02-24 03:09:04

+0

你可以試試 value [k] = table.getValueAt(i,k); – Azad 2013-02-24 08:27:24

+0

感謝您的努力,但它仍然無法正常工作。現在已經厭倦了......變得沮喪!沒有得到什麼是錯誤的代碼.....如果這件事情不能通過2morrow工作我會用一些不同的方式..我會保持整個最後一行可編輯(假),不會考慮該行在所有...我知道這不是正確的方式來通過它...但我現在沒有看到任何希望..!再次感謝你的努力! – shounak 2013-02-25 03:27:16

2

製作胡亂猜測,你正在編輯,當你點擊「提交」按鈕,最後一個單元格。

如果是這樣,那麼請參閱:Table Stop Editing

+0

實際上是通過addb actiolistener添加空行,然後使用reuired值編輯單元格,然後通過使用submit actionlistener將所有編輯的單元格的數據發送到數據庫......但不幸的是,每當ma獲得最後一個單元格的值爲null時。我不明白爲什麼會發生這種情況。 – shounak 2013-02-24 02:50:34

+0

你讀過我給你的鏈接了嗎?如果這不是問題,那麼你需要發佈一個SSCCE。 – camickr 2013-02-24 05:57:25

0

感謝阿扎德,
其工作精湛現在...
我有一個編輯的代碼點點地得到所有行的數據...

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)); 
     } }