У меня есть JScrollPane m_jScrollPane
, внутри которого отображается JLabel m_jlImage
. m_jlImage
— это снимок экрана с красной точкой, нарисованной там, где пользователь в последний раз щелкнул по экрану. Я хочу переместить (читай прокрутить) область просмотра m_jScrollPane
над красной точкой на m_jlImage
. lastClick
— это последнее место, на которое щелкнул пользователь, и оно находится в тех же координатах, что и m_jlImage
.
Это оказывается сложнее, чем я думал.
Я решил получить отношение значения точки клика ко всей длине экрана по той же оси, и прокрутить соответствующую полосу прокрутки на такое же отношение ее максимума. Кажется, это работает только в том случае, если точка, на которую последний раз нажали на экране, находится в верхнем левом углу.
Я не уверен, как справиться с ситуацией, когда точка щелчка находится на краю экрана. Этот сценарий создает соотношение, в результате чего полоса прокрутки прокручивается с тем же соотношением, но красная точка прокручивается вне поля зрения, поскольку она находится на краю экрана. Любые предложения о том, как я могу преодолеть это?
public void scrollViewToLastClick()
{
int clckH = lastClick.y;
int clckW = lastClick.x;
int picH = this.m_jlImage.getHeight();
int picW = this.m_jlImage.getWidth();
int ratW = (int)(m_jScrollPane.getWidth()*(double)clckW/(double)picW);
int ratH = (int)(m_jScrollPane.getHeight()*(double)clckH/(double)picH);
m_jScrollPane.getHorizontalScrollBar().setValue(ratW);
m_jScrollPane.getVerticalScrollBar().setValue(ratH);
}
JComponent#scrollRectToVisble
вместо этого? - person MadProgrammer   schedule 05.11.2013JLabel
или вы записываете (каким-то образом) экран в реальном времени? Можете ли вы привести простой работающий пример? - person MadProgrammer   schedule 05.11.2013JNativeHook
для захвата щелчков мышью, когда происходит щелчок, я делаю снимок экрана и помещаю информацию в объектImage
, на котором я рисую маленькую красную точку там, где произошел последний щелчок, а затем я устанавливаю значок JLabel на значок, сделанный из отредактированного изображения. Затем я вызываю описанный выше метод для прокрутки панели прокрутки до красной точки на удерживаемом JLabel. - person   schedule 05.11.2013scrollRectToVisible
, но не знаю, как создать аргументRectangle
; Я пробовалnew Rectangle(lastClick)
, но это никогда не заставило бы полосу прокрутки прокручиваться. - person   schedule 05.11.2013