【问题标题】:Update content of JPanel on a frame on button click in another frame在另一个框架中单击按钮时更新框架上 JPanel 的内容
【发布时间】:2012-11-15 07:33:09
【问题描述】:

我创建了一个框架 x1,它有一个面板 p1。加载 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


             }

【问题讨论】:

  • 为了获得更好的帮助,请尽快发布带有硬编码值(随机)而不是 JDBC 的 SSCCE,否则这里的一切都可能只是黑暗的镜头
  • 试试这个链接......这个问题已经解决了......stackoverflow.com/questions/9576308/…

标签: java swing netbeans jframe jpanel


【解决方案1】:

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

添加到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...)) 实例,将此容器重用于父级的另一个操作

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您应该将帧 f1 传递给帧 f2

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

      然后,写一个close方法

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

      设置f2帧的默认关闭操作

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

      希望没事。

      【讨论】:

        【解决方案4】:

        你可以做的一件事是在按钮的 ActionListener 中你可以执行这些操作:

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

        【讨论】:

          猜你喜欢
          • 2011-07-03
          • 1970-01-01
          • 2012-10-28
          • 2015-04-30
          • 1970-01-01
          • 1970-01-01
          • 2015-01-12
          • 2020-04-22
          • 2014-01-31
          相关资源
          最近更新 更多