gpt4 book ai didi

java - 为什么 setContentPane() 不包含 repaint()?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:50 25 4
gpt4 key购买 nike

这个问题我想了很久。

我通常通过使用 JFrameJPanel 来构建我的 SWING 程序,该 JPanel 包含由 setContentPane() 设置为内容 Pane 的窗口内容.当我希望我的内容被另一个替换时(例如,为了在单击按钮后获得一个新的掩码),我再次调用 setContentPane() 并用另一个面板替换内容 Pane 。但每次执行此操作时,我都需要在 setContentPane() 之后调用 repaint() 以使更改可见,因此我创建了一个用于创建框架的自己的类。此类扩展 JFrame 并覆盖 setContentPane(),如下所示:

@Override
public void setContentPane(Container c) {
super.setContentPane(c);
revalidate();
repaint();
}

为什么这没有在默认的 JFrame 类中实现?我这样做会不会有不好的副作用?

最佳答案

我认为这与在 Container 中添加或删除组件后不调用它的原因相同。设置内容 Pane 与将组件添加到现有的 Pane 相同。组件层次结构变得无效,因此您必须调用 revalidate()repaint()

为什么它没有被自动调用,在 Container.validate() 的文档中有建议。 :

Validating the container may be a quite time-consuming operation. For performance reasons a developer may postpone the validation of the hierarchy till a set of layout-related operations completes, e.g. after adding all the children to the container.

但这只是我的猜测。

关于java - 为什么 setContentPane() 不包含 repaint()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28694035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com