当前位置: 首页 > 知识库问答 >
问题:

绑定的Jtable或Jlist如何返回与JPacController一起使用的数据库对象?

仉昱
2023-03-14

这里有Java和netbeans。我有一个绑定到JavaDB的Jtable。我可以使用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);
        }
    }
}      

是否有类似的方法使用Jtable或JList返回对象?我尝试使用getSelectedRow()方法,但它只返回一个与Jtable中的行相关的整数,这与数据库中的ID不同。我看到的唯一一个返回对象的方法是getValueAt(),但它返回指定单元格的对象。对于Jlist,getSelectedValuesList()只返回一个字符串向量。getSelectedValues()似乎做了我想做的事情,但被贬低了。从其他文章(这里)来看,我似乎需要创建一个自定义的tablemodel,但这个示例似乎没有考虑到使用NetBeans自动生成JPAController。

提前感谢您的帮助!

UPDATE:下面是自动生成的代码,它根据请求使用值填充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>                

共有1个答案

司马飞
2023-03-14

NetBeans自动生成一个名为customersList的变量,该变量包含填充Jtable或JList的Customers对象列表。这个变量可以通过使用带有所选项索引的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的顺序没有改变时才起作用。如果您希望能够对您的项目进行排序,那么您可以遍历列表以找到正确的对象。这就是我如何利用表的ID列在Jtable中实现的:

public static int idColumn = 0;

for (Customers i : customersList) {
    if (i.getId() == jTable1.getValueAt(jTable1.getSelectedRow(), idColumn)) {
        Customers selectedCustomer = i;
    }
}
 类似资料:
  • 我想知道是否可以使用我的数据库中的数据将JTable中的一些行灰化或呈现为不可见? 以下是我的JTable中的列: 显示“我的表格”时,我希望行带有d1。getDutyStatus(),其中dutyStatus=“Inactive”将灰显。我的表格当前可以更新为“活动”(按更新按钮)或“非活动”(按删除按钮)。我不希望用户能够编辑dutyStatus为“Inactive”的任何职责。非常感谢您的任

  • 问题内容: 在Oracle 10g中,我有以下SQL: 返回: 我想扩展此查询以确定此结果集中的dog.id的oracle rownum。 我试过了 但这并不能很好地解决(无论我匹配哪个dog.id,它都返回1)。我原本希望回来3。 谢谢你的帮助! 笔记 http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html 我很确

  • 问题内容: 我有一个JList和ArrayList。如何将arraylist中的数据绑定到jlist.Ares有替代方法吗? 如何绑定以上代码。现在代码给出错误。 问题答案: 您无需克隆ArrayList。只需调用toArray()

  • 问题内容: 我想在创建PHP PDO对象之后选择要使用的MySQL数据库。我该怎么做呢? 有等于mysqli :: select_db的PDO吗? 也许我试图不当使用PDO?请帮助或解释。 编辑 我不应该使用PDO创建新数据库吗?我知道使用PDO的大部分好处会因为很少使用的操作而丢失,该操作不会插入数据,例如,但是不得不使用其他连接创建数据库,然后创建PDO连接进行其他调用似乎很奇怪。 问题答案:

  • 问题内容: 我想用MySQL和JPA设置Spring Boot。为此,我创建: Person PersonRepository PersonController 开始课程示例: 对于数据库配置,我创建了application.properties 所以我有项目结构: 但是结果是我有例外: 问题答案: 我像你一样创建了一个项目。结构看起来像这样 这些类只是复制自你的类。 我将application.

  • 问题内容: 网页应显示来自PostgreSql数据库中特定产品类别的一个产品图像。该图像应每25秒自动更改为其他图像。退货产品可能是随机的,也可能是某种顺序的。某些产品可能会丢失,而某些产品可能会重复,但是应该退回标准中的大多数产品。样品检索之间的可用图像总数可能会略有变化 当前使用下面的代码,该代码每25秒执行一次。这需要对数据库进行两个查询:一个查询可能是slwo的计数,第二个查询单个图像的检