java jbutton设置位置_java-将JButton设置为另一个JButton的位置

该博客介绍了如何在Java中实现JButton的动画移动,包括使用AnimationPane、Animator类和IAnimatable接口来控制组件的移动。通过将源组件添加到AnimationPane,并计算其在目标位置的坐标,实现组件在不同容器间的平滑过渡。此外,还讨论了可能利用Transferable API实现的拖放功能。
摘要由CSDN通过智能技术生成

动画化按钮移动实际上并不是最困难的问题,最困难的问题是试图将数据移动到可以管理的位置以及如何将源组件与目标连接起来.

首先,您需要一种可以跨容器边界移动组件的方法.虽然可能有几种方法可以做到这一点,但最简单的方法可能是使用框架的玻璃窗格

public class AnimationPane extends JPanel {

public AnimationPane() {

setOpaque(false);

setLayout(null);

}

}

这没什么特别的,它只是一个JPanel,它是透明的,没有布局管理器,通常不建议这样做,但是在这种情况下,我们将控制一切.

现在,我们需要某种方式来动画化运动.

public enum Animator {

INSTANCE;

private List animatables;

private Timer timer;

private Animator() {

animatables = new ArrayList<>(25);

timer = new Timer(40, new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

IAnimatable[] anins = animatables.toArray(new IAnimatable[animatables.size()]);

for (IAnimatable animatable : anins) {

animatable.update();

}

}

});

timer.start();

}

public void addAnimatable(IAnimatable animatable) {

animatables.add(animatable);

}

public void removeAnimatable(IAnimatable animatable) {

animatables.remove(animatable);

}

}

public interface IAnimatable {

public void update();

}

public interface IMoveAnimatable extends IAnimatable{

public JComponent getSourceComponent();

public IImportable getImportable();

}

因此,Animator是核心的“引擎”,它基本上是一个Swing Timer,它仅对其可能管理的任何IAnimatable调用更新.这种方法的目的是可以运行许多动画,但是由于只有一个更新/计时器点,因此不会(极大地)降低系统性能.

IAnimatable接口仅定义提供动画功能的基本协定.

我们需要定义某种合同,定义对象可以参与动画过程并接收信息,也就是“目标”

public interface IImportable {

public JComponent getView();

public void importValue(String value);

}

public abstract class AbstractImportable extends JPanel implements IImportable {

@Override

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值