【问题标题】:JLayeredPane error when the layer is an Integer图层为整数时出现 JLayeredPane 错误
【发布时间】:2013-08-22 23:29:23
【问题描述】:

我有一个 Canvas 子类对象,我正尝试将它与其他一些 Canvas 子类一起添加到 JLayeredPane。在 JLayeredPane 的文档中,图层以整数形式给出,例如

layeredPane.add(child, new Integer(0));

但是,当我使用 Integer 作为图层时,会出现某种运行时错误。 (我真的不知道这个错误是什么,因为我的 IDE 一直在抱怨 Swing 库缺少源。)奇怪的是,当我使用以下表单时:

layeredPane.add(child, 0);

该行实际上无错误地执行。我对 Java 很陌生,除了认为它不能很好地工作之外,还没有弄清楚自动装箱是如何工作的。我不确定在这种情况下是否会自动装箱裸 0。

我希望我可以添加有关此错误的更多详细信息,但我什至没有看到异常。我将努力将我的代码精简为一个简单的示例,但我希望有 JLayeredPane 经验的人以前见过这个。

【问题讨论】:

  • 发布SSCCE,以便我们看到您在做什么
  • 见Container.add(Component,int)。这就是该方法的来源,它并没有声称接受Integer,而是接受int。

标签: java swing autoboxing jlayeredpane


【解决方案1】:

很遗憾,我无法添加评论,所以我会留下回复。 如果您使用 IDE,那么您可以使用设计表单轻松创建您的 GUI,只需拖放即可....

我使用过 JLayeredPane,如果您向其中添加组件,您可以手动使用 add 方法,例如 layeredPane.add(Component, javax.swing.JLayeredPane.PALETTE_LAYER); 或 layeredPane.add(Component, javax.swing.JLayeredPane.DEFAULT_LAYER);

使用静态常量 Integer 字段并阅读 JLayeredPane API,或在 oracle 上使用它的一些示例。这是一个很好的学习功能。

【讨论】:

  • 我在发布之前尝试过使用 JLayeredPane.DEFAULT_LAYER,但是 JLayeredPane.DEFAULT_LAYER 和 JLayeredPane.PALETTE_LAYER 都会产生相同的无法识别的错误。我认为最好将其归结为几行示例,这样我就可以发布整个有问题的来源。
  • 此错误与我在 JLayeredPane 上使用 BorderLayout 的事实有关。当我更改为另一个布局时,错误消失了。
  • 很好,你自己想通了,因为所有其他的故障排除都没有帮助。使用 Swing 时,布局管理器是一件棘手的事情!
【解决方案2】:

此错误与我在 JLayeredPane 上使用 BorderLayout 的事实有关。当我更改为另一个布局时,错误消失了。

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2013-01-16
    • 2017-09-19
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2021-01-22
    • 2018-09-03
    • 2021-03-29
    相关资源
    最近更新 更多