2016-03-20 51 views
0

好分配作爲參數,所以這是我迄今爲止,它的工作原理。但是,我無法指定哪個?(或parameterint 10boolean轉換爲int)被設置(通過setInt())。我嘗試使用getName()看到組件variable name但是當我打印返回null獲取的JComponent的名稱,並在PreparedStatement的

  1. 我如何分配一個複選框的值作爲參數傳遞給我的PreparedStatement如果我不能夠正確地指定在其文本框的1或0從價值?

    ps.setInt(1,valueOfUnknownCheckbox);//need to put the correct checkbox as 2nd argument.

  2. 我看到了有關使用Java Reflection我敢與完全陌生的一些信息。沒有使用Java Reflection有什麼辦法嗎?

某些複選框值不會轉到正確的數據庫表的列。

我希望你能和我的傢伙的幫助。我希望能夠使用List從容器中收集組件以減少代碼行數。

這裏是我的代碼。

private void saveAdminPermissions(){ 
    List<Component> adminPermissionsChbxs = fm.getComponentsAsList(administrationPermissionsCheckBoxPanel); 

    Boolean bool = null; 

    String updateSQL = 
      "UPDATE allusers_admin_permissions SET CURC_BTN=?, DISCOUNTS_BTN=?, SECTIONS_BTN=?," 
      + " USERS_BTN=?, SCHEDULING_BTN=?, YRLEVELS_BTN=?, ACCTG_BTN=? WHERE USERID=? "; 
    try(Connection con = DBUtil.getConnection(DBType.MYSQL); 
     PreparedStatement ps = con.prepareStatement(updateSQL);) 
    { 
     int x=1; 
     for(Component c : adminPermissionsChbxs){ 
      if(c instanceof JCheckBox){ 
       bool = ((JCheckBox)c).isSelected(); 
       JOptionPane.showMessageDialog(null,"Name: "+ ((JCheckBox)c).getName()); 
       JOptionPane.showMessageDialog(null,bool); 
      } //--end of if 
      int boolToInt = (bool)?1:0 ; 
      ps.setInt(x, boolToInt); 
      x++; 
     }//--end of forloop 
      ps.setInt(8, um.getIdOfSelected(usersList)); 
      ps.executeUpdate(); JOptionPane.showMessageDialog(null,"Update successful"); 
    }catch(SQLException e){ 
     JOptionPane.showMessageDialog(null,"[email protected]\n"+ e.getMessage()); 
    } 
}//--end of method 

謝謝。

+0

這可能會幫助你http://stackoverflow.com/questions/14333026/how-to-know-which-jcheckbox-sent-itemevent。 –

+0

任何機會,你的複選框在'JTable'中? – trashgod

+0

@trashgod不,我只是把它們放入一個JPanel。尚不熟悉JTables,但我開始研究它。 – p3ace

回答

2

幾種方法是可行的:

  • 相反循環雖然視圖組件,形成具有如List<Boolean>狀態的集合的權限模型。如圖所示How to Use Check Boxes,讓每個JCheckBox具有ItemListener,更新在ListBoolean值;一個例子見here。使用該列表構建您的PreparedStatement

  • 或者,將權限描述和狀態存儲在合適的TableModel中,並使用JTable作爲視圖。如How to Use Tables: Concepts: Editors and Renderers中所述,類型爲Boolean的模型值的默認渲染器/編輯器是複選框。無論是渲染,也不記得編輯器調用呈現或編輯的單元格的值之間的值,但基本TableModel必須這樣做表。一些準則和典型示例被引用爲here。您應該能夠調用表格的getValueAt()方法來查找特定行和列中所需單元格的當前設置,如here所示。

+0

這與OP的問題有何關係?他對JCheckBox感興趣,而不是JTable。 –

+0

@dsp_user:好點;更上面。 – trashgod