Получение фактического текущего местоположения JFrame - PullRequest
1 голос
/ 14 июня 2010

Я пытаюсь создать (дочерний) JFrame, который выдвигается из-под одной стороны второго (родительского) JFrame. Цель состоит в том, чтобы потом ребенок следовал за родителем при его перемещении и реагировал на события изменения размера. Это как-то связано с этим вопросом .

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

Другой вариант, который я попытался, состоял в том, чтобы запустить новый поток обновления, который постоянно обновлял местоположение дочернего элемента, используя getLocation () или getLocationOnScreen (), но отставание было таким же, как и в ComponentListener.

Есть ли способ получить истинное фактическое местоположение JFrame даже в разгар перетаскивания? или если нет, есть ли способ получить эффект скольжения листа снизу и следования за Рамкой?

Ответы [ 2 ]

0 голосов
/ 02 июля 2010

Вы должны использовать метод mouseDragged (MouseEvent e) класса MouseAdapter.Перетаскивая главное окно, вы получите множество этих событий mouseDragged - обрабатывайте каждое из них, перемещая второе окно в положение, относящееся к расположению основного окна.

Если вы видите «запаздывание»'или если он не перемещается до тех пор, пока основное окно не остановится, попробуйте принудительно перерисовать Swing, вызвав repaint () во втором окне после изменения положения и / или поместив свой код перемещения в блок SwingUtilities.invokeLater (...):

SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        // your logic here
    }
});

Дайте мне знать, если это поможет.

0 голосов
/ 14 июня 2010

Если это не работает на Mac, вы также можете сохранить начальную позицию при начале перетаскивания, тогда положение окна - исходное положение + движение мыши.

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