点击另一个框架中的按钮,更新一个框架上JPanel的内容



我创建了一个具有面板p1的框架x1。加载x1后,复选框将动态添加到p1。添加到p1的复选框的数量取决于数据库表(t1)中满足特定标准的数据值的数量。

在第x1帧上有一个按钮b1。当点击b1时,它显示另一帧x2,在该帧中可以修改数据库表t1的数据值。x2中的"更新"按钮更新t1以反映对其数据值所做的更改。

修改后,当x2关闭时,我希望帧x1中的面板p1自动更新,以反映对数据库所做的更改,即在x2中修改t1之后,满足标准的数据值的数量可能已经改变,因此,要在p1上显示的复选框的数量也可能已经改变。

如何从x2刷新和重新加载x1中面板p1的组件。

想知道是否有人能帮我解决这个问题。提前感谢,并对问题中的大量文本感到抱歉。

In x2:
private void UPDATEActionPerformed(java.awt.event.ActionEvent evt)
{
//x1 is an object of ParentFrame
ParentFrame f1=new ParentFrame();
f1.fillPanel();
//fillpanel()fills p1 with checkboxes after running validate() and repaint() on it

}

单击b1时,会显示另一帧x2,其中数据值可以修改数据库表t1的

  • 改用CardLayout

添加到p1的复选框的数量取决于数据的数量数据库表(t1)中满足特定标准的值。

请确保JPanel中的当前内容已删除,然后

p1.revalidate();
p1.repaint();
  • 将工作,不要重新创建JPanel的新实例,然后必须将此Objcet添加到JFrame,然后必须调用validate()&repaint()JFrame(现在我希望你不要扩展这个容器:-)

修改后,当x2关闭时,我希望帧x1中的面板p1自动更新,以反映对数据库即满足标准的数据值的数量在x2中修改t1后发生了变化,因此要在p1上显示的复选框也可能已经改变。

  • 使用CardLayout而不是

  • 不要创建两个或多个JFrames,而是使用JDialog

  • 只创建一个JDialog(setDefaultCloseOperation(JDialog.CLOSE...))实例,将此容器用于父的另一个操作

通常,当您希望对UI的更改真正正确可见时,您会调用validate(),然后调用repaint()

您应该将帧f1传递到帧f2

JFrame Frame;
public f1(JFrame f){
frame=f;
}

然后,写一个关闭方法

int closeFrame(){
f.fillPanel();
f.show();
return JFrame.HIDE_ON_CLOSE;
}

设置f2帧的默认关闭操作

public f1(JFrame f){
frame=f;
this.setDefaultCloseOperation(closeFrame());
}

希望没事。

您可以做的一件事是在ActionListener for按钮中执行以下操作:

//jp is a JPanel
//remove the current JPanel
frame.remove(jp);
//do the changes you want to do
//set sizes and border as before 
//again add the panel
frame.add(jp);
frame.revalidate();
frame.repaint();

最新更新