gpt4 book ai didi

java - frame.revalidate() 对于在事件发生后获取输出很重要吗?

转载 作者:行者123 更新时间:2023-12-02 11:42:15 25 4
gpt4 key购买 nike

因此,我编写了一段代码,在单击框架南部区域的按钮后,您会得到一个矩形。

但是由于这个原因,单击按钮后代码似乎不起作用

public void actionPerformed(ActionEvent ev){
Drawing d = new Drawing();
frame.add(d);
frame.repaint();
}

我在 block 内添加了revalidate()

 public void actionPerformed(ActionEvent ev){
Drawing d = new Drawing();
frame.add(d);
frame.revalidate();
frame.repaint();
}

现在代码工作得很好,但从我一直在研究的地方来看,他们没有使用 revalidate() 并且他们的代码工作了。

为什么会发生这种情况?

最佳答案

因此,您引用的示例是使用自定义绘制方法来绘制组件。这不会(直接)影响组件的大小或位置,因此不需要容器来执行新的布局过程。

参见Performing Custom PaintingPainting in Swing了解更多详情

您的代码正在向容器添加一个新组件,因此您需要告诉容器何时再次布置容器。

所以,从 JavaDocs

public void revalidate()
Supports deferred automatic layout. Calls invalidate and then adds this component's validateRoot to a list of components that need to be validated. Validation will occur after all currently pending events have been dispatched. In other words after this method is called, the first validateRoot (if any) found when walking up the containment hierarchy of this component will be validated. By default, JRootPane, JScrollPane, and JTextField return true from isValidateRoot.

This method will automatically be called on this component when a property value changes such that size, location, or internal layout of this component has been affected. This automatic updating differs from the AWT because programs generally no longer need to invoke validate to get the contents of the GUI to update.

关于java - frame.revalidate() 对于在事件发生后获取输出很重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48469853/

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