在按钮单击另一帧中更新帧上的JPanel内容

时间:2012-11-15 07:33:10

标签: java swing netbeans jframe 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


             }

5 个答案:

答案 0 :(得分:7)

  

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

  

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

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

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

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

  • 使用CardLayout代替

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

  • 创建JDialogsetDefaultCloseOperation(JDialog.CLOSE...))只有一个实例,将此容器重新用于来自父级的其他操作

答案 1 :(得分:3)

通常,当您希望更改UI时,您可以调用validate(),然后调用repaint()

答案 2 :(得分:1)

试试这个链接......这个问题已经解决了....

Passing input from one frame to another(JAVA)

答案 3 :(得分:0)

您应该将帧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());
}

希望没关系。

答案 4 :(得分:0)

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

//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();