gpt4 book ai didi

java - 为什么 Java swing 组件显示为不轻量级,尽管它们应该是轻量级的?

转载 作者:行者123 更新时间:2023-11-30 08:50:13 25 4
gpt4 key购买 nike

我很好奇...为什么JComponent.isLightweightComponent(Component c)方法在传递JLabel、JButton等swing组件时会返回false?根据我所阅读的所有内容,这些组件应该是轻量级的。

这是否表明它们实际上是重量级的(绝对不应该是)?

或者 isLightweightComponent() 方法是否以某种方式损坏?

还是我不了解 isLightweightComponent() 方法?

试试下面的代码看看我的意思...

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class SwingLightweightTest {

public static void main(String[] args) {
// why do swing components show that they not Lightweight?
// does this mean that they are Heavywight?
// or is the .isLightweightComponent() method broken?

JLabel jLabel = new JLabel();
testLightweight(jLabel);

JButton jButton = new JButton();
testLightweight(jButton);

JPanel jPanel = new JPanel();
testLightweight(jPanel);
}

private static void testLightweight(JComponent comp) {
String isIsnot;

isIsnot = JComponent.isLightweightComponent(comp) ? "IS ": "IS NOT ";
System.out.println(comp.getUIClassID() + " \t" + isIsnot + "a lightweight component");

}
}

它返回以下内容:

LabelUI 不是轻量级组件

ButtonUI 不是轻量级组件

PanelUI 不是轻量级组件

最佳答案

isLightweightComponent 方法实际上不是检查组件本身是否是轻量级的,而是检查组件的“对等体”是否是轻量级的。 (因此,也许这个方法没有命名好?)

该方法在内部检查组件的对等体是否是 LightweightPeer 的实例:c.getPeer() instanceof LightweightPeer。而且看起来只有 NullComponentPeerNullEmbeddedFramePeer 甚至实现了这个接口(interface)。此外,isLightweightComponent 的 JavaDoc 是这样说的:

Returns true if this component is lightweight, that is, if it doesn't have a native window system peer.

据我所知,对等点是一种获取 native 操作系统事件并将其路由到组件的幕后方法。

更新

经过进一步调查,我发现在组件可见之前它没有对等体(c.getPeer() 返回 null),因此检查 c.getPeer() instanceof LightweightPeer 将返回 false(似乎表明该组件不是轻量级的,这是一种误导)。一旦组件可见,它将被分配一个对等体(例如,我的测试表明 JLabel 获取一个 NullComponentPeer 实例作为其对等体),因此将从对 isLightweightComponent 的调用返回正确的信息。

总结:isLightweightComponent 仅检查组件的对等体是否是 LightweightPeer 的实例,并且它返回 false(而不是返回 null 或抛出异常)当它实际上不能确定对等点是否是轻量级时。

关于java - 为什么 Java swing 组件显示为不轻量级,尽管它们应该是轻量级的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31083197/

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