2016-11-08 3 views
0

ここにJavaとnetbeansのnoob。私はJtableをJavadbにバインドしています。 JPAControllerを使用してデータベースと対話できます。 JComboBoxとgetSelectedItem()メソッドを使用してオブジェクトに簡単にアクセスし、それを編集または破棄するためにデータベースオブジェクトにキャストできます。例:バインドされたJtableまたはJlistはJPAControllerで使用するデータベースオブジェクトをどのように返しますか?

private void deleteInfoButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    Customers deleteInfo = (Customers) DeleteInfoComboBox.getSelectedItem(); 
    if (deleteInfo != null) { 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("CustomersPU"); 
     CustomersJpaController cjc = new CustomersJpaController(emf); 
     try { 
      cjc.destroy(deleteInfo.getId()); 
     } catch (NonexistentEntityException ex) { 
      Logger.getLogger(DeleteInformant.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
}  

JtableまたはJlistを使用してオブジェクトを返すのと同じ方法がありますか? getSelectedRow()メソッドを使用しようとしましたが、これはデータベース内のIDと異なるJtableの行に関連する整数だけを返します。オブジェクトを返す唯一の他のメソッドはgetValueAt()ですが、指定されたセルのオブジェクトを返します。 JListの場合、getSelectedValuesList()は文字列のベクトルを返します。 getSelectedValues()は私が望んだことをしているようですが、償却されます。他の投稿(Here)からは、カスタムテーブルモデルを作成する必要があるかもしれませんが、その例ではnetbeansを使用して自動生成JPAControllerを考慮していないようです。

ご協力いただきありがとうございます。

アップデート:ここでは自動要求通りの値とするJListを移入するコードを生成します:

// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 
    bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); 

    CustomersPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("CustomersPU").createEntityManager(); 
    customerssQuery = java.beans.Beans.isDesignTime() ? null : CustomersPUEntityManager.createQuery("SELECT i FROM Customers i"); 
    customersList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : customersQuery.getResultList(); 
    jScrollPane1 = new javax.swing.JScrollPane(); 
    jList1 = new javax.swing.JList<>(); 
    jButton1 = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    org.jdesktop.swingbinding.JListBinding jListBinding = org.jdesktop.swingbinding.SwingBindings.createJListBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, customersList, jList1); 
    bindingGroup.addBinding(jListBinding); 

    jScrollPane1.setViewportView(jList1); 

    jButton1.setText("jButton1"); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(34, 34, 34) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(54, 54, 54) 
      .addComponent(jButton1) 
      .addContainerGap(89, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(65, 65, 65) 
        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(130, 130, 130) 
        .addComponent(jButton1))) 
      .addContainerGap(105, Short.MAX_VALUE)) 
    ); 

    bindingGroup.bind(); 

    pack(); 
}// </editor-fold>     
+0

「JList」に値を設定するコードを投稿してください。 – kgeorgiy

+0

ありがとう!私は密接に関連した自動生成コードを見ていませんでした。 Customersオブジェクトにアクセスするために使用できるcustomersList変数が表示されます。もっとエレガントな方法があるかもしれませんが、うまくいくソリューションが見つかりました。下記参照。 – spudrucket

答えて

0

のNetBeansのJTableやJListのを移入顧客オブジェクトのリストが含まれていcustomersListという変数を自動生成します。この変数を使用すると、選択した項目のインデックスでget()メソッドを使用して、選択したオブジェクトにアクセスできます。 JTableのため

:複数の選択とJListの、顧客オブジェクトの配列について

Customers selectedCustomer = customersList.get(jTable1.getSelectedRow()); 

を生成することができるを通じて反復とJPAControllerで操作することができる。

Customers[] selectedCustomers = new Customers [jList1.getSelectedIndices().length]; 

    for (int i = 0; i < jList1.getSelectedIndices().length; i++) { 
     selectedCustomers[i] = customersList.get(jList1.getSelectedIndices()[i]); 
    } 

こののみJlistまたはJtableの順序が変更されない場合に機能します。アイテムを並べ替えることができるようにするには、リストを反復して正しいオブジェクトを見つけることができます。これは私のテーブルのID列を利用して私のJtableでこれを実装した方法です:

public static int idColumn = 0; 

for (Customers i : customersList) { 
    if (i.getId() == jTable1.getValueAt(jTable1.getSelectedRow(), idColumn)) { 
     Customers selectedCustomer = i; 
    } 
} 
関連する問題