0

我正在使用 Java计时框架来执行动画。我想要的是能够在不继承它的情况下对一个AWTSwing 组件执行一些动画。我感兴趣的动画包括更改边界、颜色或 alpha。网上有很多关于如何子类化 a 的示例Component,然后重写该paint(Graphics)方法以执行此类更改,但是我想找到一种不同的方法。

我尝试Component通过调用来获取 a 的图形

Graphics2D g2d = (Graphics2D) component.getGraphics();

然后对其进行操作——比如设置 alpha 值:

AlphaComposite newComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, newVal);
g2d.setComposite(newComposite);
component.repaint();

然而,这什么也没做。我尝试过其他方法——比如使用 customTimingTargetPropertySetters,但我没有任何运气。什么是正确的方法?

为了给这个问题提供更多背景信息,这是针对我的javaQuery库的,它是jQueryJava的一个端口,并且是在我之前的项目(带有工作动画)droidQuery之后建模的。

4

1 回答 1

0

使用摇摆(或 JFX)。AWT 是旧的且可定制性较低,因为它使用本机平台组件:将每个 Java AWT 组件与本机组件对等。

使用边界我假设边界您可以设置边界(甚至是附加的)和颜色。setOpaque(false)允许透明度。

永远不应该获取组件的图形。组件在定义明确的上下文中接收绘制事件:事件处理线程上的单线程、剪辑、定位等等。

invalidate因此,如果需要. And possibly a repaint(50L)` ,请使用组件的设置器。

于 2021-12-14T20:27:50.383 回答