2014-02-07 62 views
0

我有一個JTable,我想驗證第一列中的數據。當用戶在第一列中的任何單元格中鍵入條目並單擊另一個單元格時(焦點丟失),我想要顯示消息該條目爲false,並再次在單元格中對焦,直到條目有效。jtable中的驗證數據

首先我以爲單元格就像JTextFiled,所以我嘗試了方法addFocusListener(...),但它不起作用!

table.getValueAt(0, 0).addFocusListener(
    new FocusListener() { 
     public void focusGained(FocusEvent e) { 
     } 

     public void focusLost(FocusEvent e) { 

      for (int n = 0; n <= table.getValueAt(0, 0).toString().length(); n++) { 

       if (Character.isDigit(table.getValueAt(0, 0).toString().charAt(n)) == false) { 
        JOptionPane.showMessageDialog(null, 
        "Error: code is a number !", "Error Message", 
        JOptionPane.ERROR_MESSAGE); 
         break; 
        } else 
         break; 
       } 
      } 
     } 
    } 
}); 

創建的JTable:

String [][]data={ {"-","-","0","-"}, 
         {"-","-","0","-"}, 
         {"-","-","0","-"}, 
         {"-","-","0","-"}, 
         {"-","-","0","-"}, 
         {"-","-","0","-"}, 
         {"-","-","0","-"}, 
         {"-","-","0","-"} }; 



    String[] header = {"Code Projet", "Description", "Duree", "Taches anterieurs"}; 


    table = new JTable(data, header); 
+0

是否有你已經實現的任何代碼來嘗試這個? – mdewitt

+0

與@mdewitt相同。我們可以發佈一些例子,但是到目前爲止你已經嘗試了哪些代碼?你可以編輯你的問題,並張貼你已經嘗試過的一些示例代碼嗎? –

+0

首先,我認爲JTable中的單元格就像一個JTextField,所以我嘗試了方法addFocusListener .....但它不起作用:\ – user3285843

回答

0

被添加到一個JTable會做對被輸入到JTable值進行任何驗證的TableCellEditor

Java Table Tutorial

用戶輸入的字符串的自動檢查時,就會發生默認 編輯試圖創建 的單元格的列關聯的類的新實例。默認編輯器使用將String作爲參數的構造函數創建此實例。例如,在其單元格類型爲Integer的 列中,當用戶鍵入「123」時,默認編輯器將使用相當於 的代碼創建相應的Integer到新的Integer(「123」)。如果構造函數拋出異常,則單元格輪廓將變爲紅色並拒絕讓焦點移出 單元格。如果實現用作列數據類型的類,則如果您的類提供了一個構造函數,該構造函數採用String類型的單個參數 ,則可以使用默認編輯器 。

所以,如果你只想確保用戶在Integer進入(這是它看起來像你的代碼),你可以設置列類型爲類型的Integer

table.setDefaultEditor(Integer.class, 
         new IntegerEditor(0, 100)); 

現在DefaultCellEditor會做檢查你,如果類型不正確拋出異常。你只需要確保你發現異常並妥善處理。

我認爲上面關於創建表的鏈接的教程對你非常有用,尤其是鏈接到的部分,它涉及驗證用戶文本。

+0

okk thx非常 – user3285843