2016-03-20 5 views
0

これは私がこれまで行ってきたことです。ただし、または0booleanintに変換)が設定されている(setInt()?(またはparameter)を指定することはできません。私は、を使用してコンポーネントvariable nameを試しましたが、印刷するとnullを返します。JComponentの名前を取得し、PreparedStatementのパラメータとして代入する

  1. 私が正しく指定することはできないんだけどどうすれば1または0の値から提示されたテキストボックスれている私のPreparedStatementのパラメータとして、チェックボックスの値を割り当てることができますか?

    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には、Booleanの値がListに更新されるItemListenerがあります。例はhereと表示されます。 PreparedStatementの作成にはリストを使用してください。

  • または、許可の説明と状態を適切なTableModelに保存し、JTableをビューとして使用します。 How to Use Tables: Concepts: Editors and Renderersに記載されているように、タイプBooleanのモデル値のデフォルトレンダラー/エディタはチェックボックスです。レンダラーもエディタも、セルの値をレンダリングまたは編集するための呼び出しの間の値を記憶しませんが、TableModelのテーブルはでなければなりません。いくつかの指針および典型的な例は、hereと記載されている。表のgetValueAt()メソッドを呼び出して、特定の行と列の希望するセルの現在の設定を見つけることができます(here)。

+0

これはOPの質問にどのように関連していますか?彼はJTableではなく、JCheckBoxに興味がありました。 –

+0

@dsp_user:良い点。上記より。 – trashgod

関連する問題