2012-09-05 63 views
2

我想從Jtable中獲取值,然後使用getvalueat嘗試它,但是每當我嘗試從JTable獲取值時,它只會從第一列中獲取值選定的行,我需要從我選擇的Jtable中獲取所有值。能否請你幫我這個一個Java獲取JTable值(每行)

here is my code: 
class GetTableValue implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     AbstractButton button = (AbstractButton)e.getSource(); 
     if(e.getActionCommand().equals(button.getActionCommand)){ 
      int row = table.getSelectedRow(); 
      int col = table.getSelectedColumn(); 

      Object data = (Object)table.getValueAt(row, col); 
      JOptionPane.showMessageDialog(null, data); 
     } 
    } 
} 

這不是我的操作事件,其中在JOptionPane中所示遺憾的是它只能顯示一個值(這是你已經選擇了一個)選定表的值計算全行。

此代碼是我的JButton呼叫的動作事件(我已經排除在JTable中我的代碼,因爲它獲取從我的數據庫JTable中值)

ActionListener tableAction = new GetTableValue(); 


buttonEdit = new JButton("EDIT"); 


buttonEdit.addActionListener(tableAction); 

代碼是簡單明瞭的,我也搜索先生G(谷歌)關於獲取行的一個很好的教程,遺憾的是沒有一個很好的教程獲取Jtable值(每行)。

+0

我建議你從SwingX框架中使用JXTable。 – brainless

+1

請將Swing標籤添加到使用Swing組件的帖子中!我希望最近幾次我爲你做了這件事,*可能會給你提示。 –

回答

5

getValueAt將返回單元格的值(在行/列)。除非你是表模型支持它,否則沒有一種方便的方法(超出你正在做的)來獲取單個請求中的整行。

此外,還要記住,如果表進行排序或篩選,該模型係數不匹配的觀點,你需要首先轉換,使用convertRowIndexToModelconvertColumnIndexToModel

UPDATE

的唯一途徑圍繞它是如果您使用的表格模型具有getRow(或等效)方法。如果不知道你是如何存儲在臺式它旁邊的數據幾乎是不可能給出一個準確的答案,但一般的想法是......

public class MyAwesomeTableModel extends AbstractTableModel { 
    // All the usual stuff... 

    public MyRowData getRowAt(int index) { ... } 
} 

現在,MyRowData是什麼都執行表數據你已經創建。它可能(最好)是一個單獨的Object,或者是DefaultTableModel一組對象。

class GetTableValue implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     AbstractButton button = (AbstractButton)e.getSource(); 
     if(e.getActionCommand().equals(button.getActionCommand)){ 

      int row = table.convertRowIndexToModel(table.getSelectedRow()); 
      MyAwesomeTableModel model = (MyAwesomeTableModel)table.getModel(); 

      MyRowData data = model.getRowAt(row); 
      JOptionPane.showMessageDialog(null, data); 
     } 
    } 
} 

這一切都取決於你如何實現你的TableModel和你是如何實現你的行數據,但是這是一般JIST

+0

有沒有其他方法?我應該說「作弊」,使這件事情的工作,我打開並閱讀你給我的鏈接,這是一個有點複雜,我理解:) – Zyrax

+0

你可以請告訴我,是否更好地獲得身份證在Jtable並在數據庫中搜索它,然後將獲取值存儲在數組或變量中? – Zyrax

+0

我不能說它會立即幫助你,但這是一般jist – MadProgrammer

1

你可以試試下面的代碼來獲得選擇行值:如果你想從選擇的所有值

int selectedRow = jTableName.getSelectedRow(); 
selectedRow = jTableName.convertRowIndexToModel(selectedRow); 
String val1 = (String)jTableName.getModel().getValueAt(selectedRow, 0); 
String val2 = (String)jTableName.getModel().getValueAt(selectedRow, 1); 
+0

我會嘗試此代碼。謝謝 – Zyrax

10

ed row然後嘗試這個code

int row = jTable1.getSelectedRow(); 
int column = jTable1.getColumnCount(); 
for(int i = 0; i < column; i++) { 
    System.out.println(jTable1.getValueAt(row, i)); 
} 

你得到的所有值選擇行,不管多少列jtable

在那裏如果你想從所有值的JTable然後嘗試:

int row = jTable1.getRowCount(); 
int column = jTable1.getColumnCount(); 
for (int j = 0; j < row; j++) { 
    for (int i = 0; i < column; i++) { 
     System.out.println(jTable1.getValueAt(j, i)); 
    } 
} 

是的,你可以使用Object[]來存儲值。例如:

Object[] val = new Object[column]; 
for (int k = 0; k < val.length - 1; k++) { 
    for (int j = 0; j < row; j++) { 
     for (int i = 0; i < column; i++) { 
      val[k] = jTable1.getValueAt(j, i); 
      System.out.println(val[k]); 
     } 
    } 
} 
+0

哇,它的工作!謝謝,它獲取Jtable值並打印出來。 – Zyrax

+0

但是,如何將值存儲到變量?我應該使用Object []數組來存儲它嗎? – Zyrax

+0

是的,你可以使用Object []看我的答案中的例子。我希望它爲你工作。 – Rajshri

2
private void jTable1MousePressed(java.awt.event.MouseEvent evt) {          

int selectedRow; 

ListSelectionModel rowSM = jTable1.getSelectionModel(); 

    rowSM.addListSelectionListener(new ListSelectionListener() 
    { 
    @Override 
    public void valueChanged(ListSelectionEvent e) 
    { 
     ListSelectionModel lsm = (ListSelectionModel) e.getSource(); 

     selectedRow = lsm.getMinSelectionIndex(); 

     int numCols = jTable1.getColumnCount(); 

     model = (DefaultTableModel) jTable1.getModel(); 

     System.out.print(" \n row " + selectedRow + ":"); 

     for (int j = 0; j < numCols; j++) 
     { 
      System.out.print(" " + model.getValueAt(selectedRow, j)); 
     } 

    } 
}); 
} 

使用這個你可以得到整行的值,其中u點擊特定行。

+0

因此,每次使用點擊表格時,都會添加另一個選擇偵聽器?這很快就會變得混亂 – MadProgrammer