如何在Java中从一个位置缓慢移动按钮到另一个位置?

时间:2016-09-03 05:37:56

标签: java

我有两个按钮,我想设置2按钮所在的1按钮,反之亦然。但我希望它从第一个地方慢慢移动到另一个地方。任何人都知道如何做到这一点?

int num_1_x= num_array[num1].getLocation().x;
int num_2_x =num_array[num2].getLocation().x;

num_array[num1].setLocation(num_2_x, num_array[num1].getLocation().y); 
num_array[num2].setLocation(num_1_x,num_array[num2].getLocation().y);

2 个答案:

答案 0 :(得分:1)

这在很大程度上取决于您当前的布局的组织方式。你看,通常使用布局管理器将按钮放在某个面板中。你唯一可以做的就是交换他们的位置;那就像"瞬间"。

但是,如果你要做"硬编码"位置设定;所以button1在x1,y1;和button2在x2,y2;当然你可以计算出地理位置"两个按钮之间的距离;将该距离切成若干部分;然后分几个步骤重新定位两个按钮。换句话说:你会让他们徘徊"在屏幕上。

答案 1 :(得分:0)

与往常一样,最好将“大问题”分解为较小的问题,并一步一步。 我建议首先学习以下DRAGGING示例:

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class DragTest extends JFrame {

    int pX, pY;

    public DragTest() {

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(600, 500));

        JPanel  jPanel1 = new JPanel();
        add(jPanel1);

        jPanel1.setLayout(null);

        final JButton button = new JButton("Drag Me");
        button.setBounds(50, 50, 150, 25);

        button.addMouseMotionListener(new MouseMotionAdapter(){
            @Override
            public void mouseDragged(MouseEvent me) {
                button.setLocation((button.getLocation().x + me.getX()) - pX,
                        (button.getLocation().y + me.getY()) - pY);
                jPanel1.revalidate();
                jPanel1.repaint();
            }
        });
        button.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent me) {
                // Get x,y and store them
                pX = me.getX();
                pY = me.getY();
            }
        });

        jPanel1.add(button);
        jPanel1.revalidate();
        jPanel1.repaint();

        pack();
    }

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new DragTest().setVisible(true);
            }
        });
    }
}

接下来,当你明白这个想法时,尝试用语法改变pX和pY而不是鼠标拖动(以创建所需的动画)。

用两个按钮做。
作为最后一步,添加交换头寸所需的计算。