我创建了一个具有面板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();