Java如何在jlist中刷新sql结果

Java如何在jlist中刷新sql结果,java,swing,jdbc,jlist,Java,Swing,Jdbc,Jlist,我的Java应用程序有点小问题。我想在左侧列表中显示餐厅的订单,在右侧列表中显示所选订单的详细信息。订单通过MySQL查询读取,然后打印到Jlist中。但是,我们希望使用refresh按钮再次执行查询,然后将其打印到Jlist。但是,我无法使刷新按钮工作。它确实会刷新内容,但会打开一个新的Jfram窗口 从GUI类: public class Barscherm extends javax.swing.JFrame { private BedieningsManager manager; /**

我的Java应用程序有点小问题。我想在左侧列表中显示餐厅的订单,在右侧列表中显示所选订单的详细信息。订单通过MySQL查询读取,然后打印到Jlist中。但是,我们希望使用refresh按钮再次执行查询,然后将其打印到Jlist。但是,我无法使刷新按钮工作。它确实会刷新内容,但会打开一个新的Jfram窗口

从GUI类:

public class Barscherm extends javax.swing.JFrame {
private BedieningsManager manager;
/**
 * Creates new form Barscherm
 */
public Barscherm() {
    manager = new BedieningsManager();
    initComponents();
}

    private void opvraagKnopActionPerformed(java.awt.event.ActionEvent evt) {       // This is the refresh button                                     

    jPanel1.removeAll();
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Barscherm().setVisible(true);
        }
    });
} 
从manager类中:

public class BedieningsManager {
private ArrayList<Barbestelling> bestellingen;
private int tafelNummer,bestelNummer, aantal;
Database db1 = new Database();

public BedieningsManager(){
    this.bestellingen = new ArrayList<Barbestelling>();
    maakBestellingen();
   public void maakBestellingen(){
    aantal = db1.getAantalRijenBarBestelling();
    Barbestelling[] bss = new Barbestelling[aantal];
    for (int i = 0; i < aantal; i++){

        tafelNummer = db1.getTafelnummer(i);
        bestelNummer = db1.getBestelNummer(i);
        bss[i] = new Barbestelling(bestelNummer,tafelNummer,"Geplaatst");
        bestellingen.add(bss[i]);

    }

}
public ArrayList<String> toonBarbestellingen()
{
    ArrayList<String> tafelNummers = new ArrayList<String>();

    for(Barbestelling i : bestellingen)
    {
        tafelNummers.add(i.getTafelNummer());
    }

    return tafelNummers;
}

public ArrayList<Barbestelling> getBestellingen()
{
    return bestellingen;
}

public String getDetails(String barbestelling){
    String details = "";
    boolean found = false;
    int count = 0;

    while(!found && count < bestellingen.size())
    {
        if(bestellingen.get(count).getTafelNummer().equals(barbestelling))
        {
            found = true;
            details = bestellingen.get(count).getDetails();
        }
        else
        {
            count ++;
        }
    }
    if(!found)
    {
        System.out.println("Bestelling met Tafelnummer: " + barbestelling + " bestaat niet!");
    }


    return details;
}
}
GUI的屏幕截图:


使用l设置您自己的实例。它有添加、更改和删除内容的方法,而且JList应该监视它,观察您的更改

看看你的actionPerformed方法

private void opvraagKnopActionPerformed(java.awt.event.ActionEvent evt) {       // This is the refresh button                                     
    jPanel1.removeAll();
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Barscherm().setVisible(true);
        }
    });
}
首先,从
jPanel1
中删除所有活动组件,然后创建一个新的
Barsdherm
窗口并使其可见

应该做的是从数据库中加载所需的所有值并刷新列表模型

您的示例中没有足够的代码可以100%确定精确的解决方案,但一种方法是将数据库中需要的所有值加载到新的
DefaultListModel
中,并将此模型应用到
JList


看看示例

刷新按钮或数据库查询的代码是什么?刷新按钮称为“opvraagKnop”(我们必须用荷兰语名称编程),查询简单选择所有仍需交付的订单的产品。我添加了查询,但不介意混乱。我们不得不这样做,因为我们得到的数据库有点搞砸了…为了更快地获得更好的帮助,发布一个。嗨,谢谢你的回答,但我对Java还是相当陌生的。你介意解释一下吗?你想要更多的代码来完成吗?因为我仅有的额外代码是来自GUI的代码。剩下的就这些了,事情是这样的。显然,您已经从数据库中加载了一次数据。您需要做的只是在actionPerformed方法中复制流程
private void opvraagKnopActionPerformed(java.awt.event.ActionEvent evt) {       // This is the refresh button                                     
    jPanel1.removeAll();
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Barscherm().setVisible(true);
        }
    });
}