2012-11-15 36 views
4

我创建了一个具有面板p1的帧x1。当加载x1时,复选框会动态添加到p1。添加到p1的复选框的数量取决于数据库表(t1)中满足特定条件的数据值的数量。更新另一帧中按钮单击帧上的JPanel内容

框架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 


      } 
+0

为了更好的帮助,尽快发布一个[SSCCE](http://sscce.org/)与harcoded值(随机)而不是JDBC,否则这里的所有内容都可能只能拍摄到黑暗 – mKorbel

回答

3

通常你调用一个validate()然后repaint()当你想更改UI实际上是可见的正确。

5

当点击B1,它显示在该数据值的数据库中的表T1的 可以被修改的另一帧X2

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

确保从JPanel的当前内容被删除,然后

p1.revalidate(); 
p1.repaint(); 
  • 会的作品,不要对re_create的JPanel一个新的实例,那么你必须这样Objcet添加到JFrame,则必须调用validate() & repaint()JFrame(现在我希望你doean't扩展该容器:-)

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

  • 使用CardLayout代替

  • 不创建两个或更多JFrames,使用JDialog相反,

  • 创建JDialogsetDefaultCloseOperation(JDialog.CLOSE...))只有一个实例,重用此容器再来自父母的行动

0

你应该通过帧F1到帧F2

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

然后,写一个接近帧F2的方法

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

组默认关闭操作

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

希望没关系。