2012-10-08 64 views
0

從JTable的一排我有一個JTable以這種格式顯示內容:選擇基於的JTextField輸入

Part Number Quantity Price 
SD1131   7  1,000 
SD6534   6  2,000 

在同一幀I有一個JTextField(txtNo)。我需要它,以便當用戶在JTextfield上鍵入部件號時,在JTable上選擇相應的記錄。到目前爲止,我只能夠選擇基於這樣的行號記錄:

txtNo.addFocusListener(new FocusAdapter() { 
      public void focusLost(FocusEvent e) { 

       int index1 = 0; 
       int index2 = 0; 
       try { 
        index1 = Integer.valueOf(txtNo.getText()); 
        tbStore.setRowSelectionInterval(index2, index1); 
       } catch (Exception ae) { 
        ae.printStackTrace(); 
       } 
      } 
     }); 

我如何能實現同樣的方法來選擇基於該JTextField的輸入JTable的行?

回答

4

您將需要在表格中找到零件號等於在文本框中輸入的零件號的零件。採取的步驟:

  • 閱讀您的文本框
  • 內容搜索匹配元素在TableModel
  • 索引使用convertRowIndexToView方法轉換該指數對應的行指數在JTable(取在帳戶排序,過濾,...)
  • 使用JTablesetRowSelectionInterval方法來選擇該行

作爲替代方案,您可以使用內置搜索功能的SwingX項目的JXTable。 SwingX庫還包含一個組件,它允許搜索這樣一個JXTable(請參閱JXSearchPanelJXSearchField

2

你應該詢問的TableModel,並找出哪些行包含你正在尋找的零件號:

for(int i=0;i<tbStore.getRowCount();i++) { 

    // 0 is for the column Part number 
    if(tbStore.getValueAt(i, 0).equals(Integer.valueOf(txtNo.getText())) { 
     tbStore.setRowSelectionInterval(i, i); 
     break; 
    } 
} 

注意事項:我沒有測試此代碼,但它應該給你至少基本理念。

+0

好主意Polet,但我測試過它....沒有工作。 – ErrorNotFoundException

+1

@Stanley基本上工作,但依賴於'JTables'設置,'XxxTableModel','Listeners','RowSorter','RowFilter',不知道你的情況,爲了更好地幫助發佈一個[SSCCE](http:// sscce (@ @ Robin') – mKorbel

+1

@Stanley然後你在其他地方做錯了什麼;-)一個SSCCE的時間... – kleopatra