Прослушивание в реальном времени высоты и ширины JFrame - PullRequest
4 голосов
/ 28 декабря 2011

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

Я исследовал это, и ответы, представленные на следующий вопрос, помогли мне немного, но не полностью: Прослушивание событий изменения размера JFrame, когда пользователь перетаскивает свою мышь?

Моя проблема в том, что мой класс «HSFrame» расширил JFrame и реализовал ActionListener, MouseMotionListener (однако ActionListener не имеет отношения к этому вопросу). Этот вопрос относится к MouseMotionListener.

У меня есть отдельный класс под названием «CanvasPanel», который расширяет JPanel - здесь я использую графический объект для обновления информации в реальном времени путем рисования строк.

public void mouseMoved(MouseEvent e)
{
}

public void mouseDragged(MouseEvent e)
{
    validate();
    canvas.repaint();
}

Это фрагмент кода из моего класса "HSFrame" (расширяет JFrame, реализует MouseMotionListener). В этом примере кода «canvas» является объектом CanvasPanel, и я вызываю его метод repaint () всякий раз, когда вызывается MouseDragged.

Я решил использовать MouseMotionListener, потому что это (предположительно) даст мне обновления в реальном времени, а не метод componentResized () ComponentListener (который привязан к MouseReleased).

Все прекрасно обновляется на 100%, когда я изменяю размер рамки в верхнем левом углу. Значения высоты, ширины, X и Y перекрашиваются идеально.

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

В самом классе «CanvasPanel» я расширил ComponentListener и добавил туда прослушиватель объекта «HSFrame» - он не обновляется в режиме реального времени, что было хорошо, но он перерисовывает высоту и ширину после мышь отпущена независимо от того, с какого угла был изменен размер HSFrame.

Основной вопрос: Можно ли заставить MouseMostionListener знать, что я изменяю размер JFrame из правого нижнего угла? Он слышит, когда я перемещаю рамку, щелкая и перетаскивая строку заголовка, и слышит, когда я изменяю размер из верхнего левого угла (который также взаимодействует с строкой заголовка). Он просто не слышит, когда что-то идет к другим границам JFrame.

1 Ответ

3 голосов
/ 28 декабря 2011

Вам не нужно делать это с помощью мыши! Сделай это простым способом: Напишите компонентный слушатель . Попросите HSFrame внедрить ComponentListener и введите код изменения размера в public void componentResized(ComponentEvent e).

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

...