【问题标题】:How to add ShapeIcons to a JPanel without a label?如何在没有标签的情况下将 ShapeIcons 添加到 JPanel?
【发布时间】:2014-10-19 23:45:30
【问题描述】:

主要目标:添加一些我已经制作成 JPanel p1 的 ShapeIcon,以便它们可以动画在整个 JPanel p1 中移动,并且一旦超出界限就不会消失它们是在其中创建的标签的。

// 下面是我把一个shapeIcon变成一个标签,这样就可以添加到Jpanel p1

final MoveableShape clock = new Clock(20,10, SHAPE_WIDTH);
final ShapeIcon clockIcon = new ShapeIcon(clock, ICON_WIDTH, ICON_HEIGHT);
final JLabel label3 = new JLabel(clockIcon);
...
p1.add(label3)

我所有的形状都很好地添加到了 JPanel,但我让它们动画化并希望它们能够在整个面板中浮动,因为我只知道如何通过 JLabel 将它们添加到 p1,一旦超出标签边界,形状消失。 也许有一种方法可以通过 JLabel 以外的方式添加 ShapeIcon?

【问题讨论】:

  • ShapeIcons 是什么?
  • 类似于 ImageIcon 我想除了使用 Graphics2D 之外,您可以使用矩形、圆形等创建一个形状。它会将其组合成一个形状,(即使用 2 个圆形轮胎和矩形创建汽车身体)
  • “相似”是不一样的——需要更多的上下文才能做出准确的建议。但是,如果你可以将它应用到JLabel,那么它必须实现Icon接口,这意味着必须有一个paintIcon(Component, Graphics, int, int)方法......
  • 在不知道ShapeIcons 的工作原理的情况下,不可能提出可靠的建议......

标签: java swing jpanel jlabel


【解决方案1】:

here 所示,您可以渲染Icon 并将其显示在您的paintComponent() 实现中。由于您的动画表面不需要布局,请扩展 JComponent。每个Icon 可以是embedded-resource 或运行时构造,例如ColorIcon。完整示例见KineticModel,引用here,和SimpleBalls,引用here

【讨论】:

    【解决方案2】:

    一旦超出标签边界,形状就会消失。

    您不应该使用标签边界。标签的大小应该是形状的大小。

    我让它们动画化,并希望它们能够在整个面板中浮动,

    那么动画应该是通过改变面板上标签的位置来完成的。

    形状消失

    然后您需要检查标签的位置相对于面板的大小。即对于水平移动,X 位置加上标签宽度不能超过面板的宽度。

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 2017-09-09
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      相关资源
      最近更新 更多