0

我有 3 个 jlist。我有一个按钮,用于从 Patient Jlist 中删除选定项目,但我还需要它从我的历史 Jlist 和 Invoices Jlist 中删除。我将其从一个中删除,但我不知道如何实现从历史 jlist 和发票 jlist 中删除的代码。

这是我从 1 个有效的 JList 中删除的代码!:

JButton btnDeleteDB = new JButton("Delete From DB");
btnDeleteDB.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent arg0) {
      int selectedIndex = patientList1.getSelectedIndex();
      if (selectedIndex != -1) { 
         int x = patientList.get(selectedIndex).getID();
         String query =
            "DELETE FROM `patienttable` WHERE `patientid` ='"+x+"' LIMIT 1";
         try {
            Connection con =
               DriverManager.getConnection(
                  "jdbc:mysql://localhost:3306/denistassignment","root","");
            Statement s = (Statement) con.createStatement();
            s.execute(query);
         } catch (Exception ex) {
            ex.printStackTrace();
         }
         patientListModel.remove(selectedIndex);
         patientList1.remove(selectedIndex);  
      }
   }});
btnDeleteDB.setBounds(320, 500, 125, 23);
contentPane.add(btnDeleteDB);
4

1 回答 1

1

恐怕您的代码显示了很多设计缺陷,在回答您的问题之前我会列出一些:

  • 删除从数据库中删除项目的代码和从 ActionListener 中删除列表的代码,并将其放在私有方法中,以便您可以在需要时从其他侦听器轻松访问它,以增强可读性并避免代码重复。
  • 您既没有关闭数据库连接,也没有关闭语句。这样做。
  • 不要捕获一般异常,也不要只调用 e.printStackTrace() ,除非用于在生产之前删除的显式调试代码。
  • patientList1.remove(selectedIndex);与从 JList 中删除项目无关,请参阅此方法的 JavaDoc 了解详细信息。简而言之,删除该行。

我想你所有的 JLists 都在同一个类中,并且你有指向每个的成员变量。如果是这样,那么在定位当前选定对象的索引的同时,只需在其他 JLists 中找到相应的对象,这些对象也应该被删除。我不知道您系统的详细信息,因此可能会遍历其他列表项,将 ID 与您要删除的 ID 进行比较,然后只调用listXY.getModel().remove(indexOfItem)您要删除的每个项。

于 2013-04-30T22:14:31.713 回答