JavaSwing实现动态变化removeAll()的坑

        今天在写课程设计,要求是做一个思维导图编辑工具,对节点进行操作之后要实现动态变化。因为节点组成的组件过多,遍历删除很耗费时间,所以直接用removeAll后重新遍历添加。

        然而在这时候发现removeAll之后添加新组件无法添加成功,导致页面不能刷新。

        下面直接贴原来的代码:

public void refresh(){
    frame.removeAll();
    show();
    frame.repaint();
}

        之后又尝试了一些其他办法,比如添加frame.revalidate();等等,都无法解决问题。


        最后发现是因为removeAll会把JFrame的根面板(Root Pane)删除,而JFrame 的根面板(Root Pane)是一个包含内容面板的面板,它提供了一些额外的功能,比如处理窗口的装饰和事件分发。其中ContentPane是Root Pane的一个JPanel或类似的容器子组件,它用于放置实际的用户界面内容,负责布局和管理用户界面的其他组件,当它被删除就会导致页面其他组件失效。

        所以removeAll的正确用法应该为:getContentPane().removeAll();

        于是我把代码修改了一下就成功了:

public void refresh(){
    frame.getContentPane().removeAll();
    show();
    frame.repaint();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值