Перетаскивание JPanel с помощью MouseMotionListener [duplicate]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

3
задан trashgod 25 October 2014 в 18:41
поделиться

2 ответа

int x = e.getX(), y = e.getX();

Вероятно, это должно быть изменено на

int x = e.getX(), y = e.getY();

. Поэтому он работает только в направлении x, вы фактически не учитываете направление Y

2
ответ дан Jeeter 27 August 2018 в 19:31
поделиться

Да, для того, чтобы перетащить компоненты, вам также нужно знать начальное местоположение, чтобы вы могли рассчитать расстояние, которое перемещала мышь.

Вот какой код, который показывает это общее поведение при перемещении окна.

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class MoveWindow extends MouseInputAdapter
{
    Point location;
    MouseEvent pressed;

    public void mousePressed(MouseEvent me)
    {
        pressed = me;

    }

    public void mouseDragged(MouseEvent me)
    {
        Component component = me.getComponent();
        location = component.getLocation(location);
        int x = location.x - pressed.getX() + me.getX();
        int y = location.y - pressed.getY() + me.getY();
        component.setLocation(x, y);
     }

    private static void createAndShowGUI()
    {
        JWindow window = new JWindow();
        window.setSize(300, 300);
        window.setLocationRelativeTo( null );
        window.setVisible(true);

        MouseInputAdapter listener = new MoveWindow();
        window.addMouseListener( listener );
        window.addMouseMotionListener( listener );

    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

Я позволю вам реализовать его для ваших целей.

5
ответ дан camickr 27 August 2018 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: