无法在更改的框架中显示面板

时间:2019-07-15 17:48:48

标签: java swing awt

我正在使用具有两个框架的JAVA桌面应用程序,用户单击框架1上的一个按钮,基于所选选项的响应将更新到数据库。在更新响应时,应显示第2帧。

如果在数据库更新之前将第2帧设置为可见,则显示第2帧,但内容为空,即不显示第2帧的面板。但是一旦数据库更新完成,就会显示框架的内容。

db.accommodations.find({ name : { $gt: { $size : 1 } }})

第2帧的内容应在数据库更新进行时或之前显示。

1 个答案:

答案 0 :(得分:0)

对于这种特殊情况,建议您使用:

Swing Workerthis example

中所示的tutorial

大致情况:

protected String doInBackground() throws Exception {
    try {
        Thread.sleep(5000); //Simulates long running task (your database update)
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "Updated"; //Returns the text to be set on your status JLabel once the update is done
}

@Override
protected void done() {
    super.done();
    try {
        // Here update your GUI or do whatever you want to do when the update is done.
        textfield.setText(get()); //Set to the textField the text given from the long running task
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
}

在您的ActionListener上类似:

private ActionListener listener = (e -> {
    frame2.setVisible(true); //suggested use of cardlayout and display nextCard here.
    worker.execute(); //Initializes long running task
});

但是我建议您不要使用多个JFramesThe Use of Multiple JFrames: Good or Bad Practice?,而应使用CardLayoutfor example