【问题标题】:After remove the component inside JPanel, nothing to show移除 JPanel 内的组件后,没有任何显示
【发布时间】:2014-05-06 22:22:12
【问题描述】:

您好,我有一个 JPanel,里面有很多 JPanel。当用户更改内部面板中的数据时。我需要刷新外面板;我删除了所有内部面板并添加了新的内部面板。我的问题是刷新后没有显示内部面板。如果我让 JFrame 最小化然后最大化,它会显示刷新面板。有人会告诉我如何解决这个问题。提前致谢。

有我的代码可以删除和添加新的 JPanel

private void getListCommentPane(){

      //sortPage

     Component[] components = jpListCommentPane.getComponents();
        for (Component component : components) {
            jpListCommentPane.remove(component);
            jpListCommentPane.validate();
        }

      ArrayList<CommentItem>sortComment= lstComment;
     Collections.sort(sortComment,CommentItem.sortPage);
     for(CommentItem comm: sortComment){
                    //The class DivCommentJPane extends JPanel
         DivCommentJPane d=new DivCommentJPane(comm, this);
         jpListCommentPane.add(d);

     }  

     jpListCommentPane.repaint();

 }

【问题讨论】:

  • 根据您的描述,添加新组件时面板似乎没有自动重新验证。在将所有内部面板添加到父面板后,尝试在父面板上显式调用 revalidate()
  • 尝试调用jpListCommentPane.revalidate() 而不是jpListCommentPane.repaint(),最后执行此操作,执行一次。不需要调用jpListCommentPane.validate();,尤其是在循环中:P
  • @MadProgrammer 感谢它有效。如何将您的评论标记为答案?

标签: java swing jpanel


【解决方案1】:

删除组件并将其添加到jpListCommentPane 后,尝试调用jpListCommentPane.revalidate() 而不是jpListCommentPane.repaint(),最后执行此操作,执行一次。不需要调用jpListCommentPane.validate();,尤其是在循环中

revalidate 将指示容器它需要执行布局并更新其联系人层次结构

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2014-07-21
    相关资源
    最近更新 更多