绑定的 Jtable 或 Jlist return 数据库对象如何与 JPAController 一起使用?
How does a bound Jtable or Jlist return a database object to be used with a JPAController?
a Java 和 netbeans 菜鸟在这里。我有一个 Jtable 绑定到我的 Javadb。我可以使用 JPAController 与数据库交互。我可以使用 JComboBox 和 getSelectedItem() 方法轻松访问该对象,并将其转换为我的数据库对象以便进行编辑或销毁。例如:
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);
}
}
}
是否有类似的方法来 return 使用 Jtable 或 Jlist 的对象?我尝试使用 getSelectedRow() 方法,但这只是 returns 一个与 Jtable 中的行相关的整数,它与我的数据库中的 ID 不同。我看到 returns 对象的唯一其他方法是 getValueAt(),但它 returns 指定单元格的对象。对于 Jlist,getSelectedValuesList() 只是 return 一个字符串向量。 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>
NetBeans 自动生成一个名为 customersList 的变量,其中包含填充 Jtable 或 Jlist 的客户对象列表。通过使用具有所选项目索引的 get() 方法,此变量可用于访问所选对象。
对于一个 Jtable:
Customers selectedCustomer = customersList.get(jTable1.getSelectedRow());
对于具有多项选择的 Jlist,可以生成一个 Customers 对象数组,可以使用 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 的顺序不变时有效。如果您希望能够对您的项目进行排序,那么您可以遍历列表以找到正确的对象。这就是我在 Jtable 中利用我的 table:
的 ID 列实现它的方式
public static int idColumn = 0;
for (Customers i : customersList) {
if (i.getId() == jTable1.getValueAt(jTable1.getSelectedRow(), idColumn)) {
Customers selectedCustomer = i;
}
}
a Java 和 netbeans 菜鸟在这里。我有一个 Jtable 绑定到我的 Javadb。我可以使用 JPAController 与数据库交互。我可以使用 JComboBox 和 getSelectedItem() 方法轻松访问该对象,并将其转换为我的数据库对象以便进行编辑或销毁。例如:
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);
}
}
}
是否有类似的方法来 return 使用 Jtable 或 Jlist 的对象?我尝试使用 getSelectedRow() 方法,但这只是 returns 一个与 Jtable 中的行相关的整数,它与我的数据库中的 ID 不同。我看到 returns 对象的唯一其他方法是 getValueAt(),但它 returns 指定单元格的对象。对于 Jlist,getSelectedValuesList() 只是 return 一个字符串向量。 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>
NetBeans 自动生成一个名为 customersList 的变量,其中包含填充 Jtable 或 Jlist 的客户对象列表。通过使用具有所选项目索引的 get() 方法,此变量可用于访问所选对象。
对于一个 Jtable:
Customers selectedCustomer = customersList.get(jTable1.getSelectedRow());
对于具有多项选择的 Jlist,可以生成一个 Customers 对象数组,可以使用 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 的顺序不变时有效。如果您希望能够对您的项目进行排序,那么您可以遍历列表以找到正确的对象。这就是我在 Jtable 中利用我的 table:
的 ID 列实现它的方式public static int idColumn = 0;
for (Customers i : customersList) {
if (i.getId() == jTable1.getValueAt(jTable1.getSelectedRow(), idColumn)) {
Customers selectedCustomer = i;
}
}