有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有两个按钮,我想将1按钮设置为2按钮所在的位置,反之亦然。但我想让它慢慢地从第一个地方移动到另一个地方。有人知道怎么做吗

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) 个答案

  1. # 1 楼答案

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

    但如果你想做“硬编码”的位置设置;所以按钮1位于x1,y1;按钮2位于x2,y2;当然,你可以计算两个按钮之间的“地理”距离;将这段距离分成若干部分;然后分几个步骤重新定位两个按钮。换句话说:你会让他们在屏幕上“游荡”

  2. # 2 楼答案

    和往常一样,最好把“大问题”分解成小问题,一步一步地解决。 我建议从学习以下示例开始:

    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的语法,而不是通过鼠标拖动(以创建所需的动画)

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