Итак, моя основная предпосылка заключается в том, что у меня есть следующая настройка (http://imgur.com/qgwaYEn.png< /а>):
И моя проблема только в отношении главного окна изображения. Все маленькие черные прямоугольники окружают POI, выбранные детектором Харриса, и я хочу, чтобы пользователь выбрал подмножество квадратов для отправки в качестве основы обучающего набора. Как видно (внизу справа), я могу сделать поля красными, когда на них нажимают, и я делаю это, перерисовывая изображение, а затем изменяя верхний компонент панели JSplit на новый JScrollPane, который является JLabel, который инкапсулирует значок изображения.
Это прекрасно работает, но, поскольку это новая панель прокрутки, она возвращается в верхний левый угол, что в лучшем случае неудобно. Итак, теперь, прежде чем изменить JScrollPane, я сохраняю текущее значение как горизонтальной, так и вертикальной полос, а затем устанавливаю новые полосы ScrollPanes на соответствующие значения.
НО, это работает только для одного из них. Это так странно. Первый всегда работает нормально, второй же по умолчанию равен 90, независимо от того, как он установлен.
Соответствующий сегмент кода:
int scrollHoriz = view_scroll.getHorizontalScrollBar().getValue();
int scrollVerti = view_scroll.getVerticalScrollBar().getValue();
System.out.println("OLD Horizontal Position: " + view_scroll.getHorizontalScrollBar().getValue());
System.out.println("OLD Vertical Position: " + view_scroll.getVerticalScrollBar().getValue());
System.out.println("Horiz: " + scrollHoriz);
System.out.println("Verti: " + scrollVerti + "\n");
view_scroll = new JScrollPane();
view_scroll.getViewport().add(new JLabel(new ImageIcon(theImage)));
view_scroll.getHorizontalScrollBar().setUnitIncrement(12);
view_scroll.getVerticalScrollBar().setUnitIncrement(12);
view_scroll.getViewport().getView().addMouseListener(new TrainingMousePress(this));
view_scroll.getVerticalScrollBar().setValue(scrollVerti);
view_scroll.getHorizontalScrollBar().setValue(scrollHoriz);
System.out.println("NEW Horizontal Position: " + view_scroll.getHorizontalScrollBar().getValue());
System.out.println("NEW Vertical Position: " + view_scroll.getVerticalScrollBar().getValue());
System.out.println("Horiz: " + scrollHoriz);
System.out.println("Verti: " + scrollVerti);
view.remove(view.getTopComponent());
view.setTopComponent(view_scroll);
view.setDividerLocation(600);
return;
Что будет распечатано (при щелчке любого поля):
- СТАРАЯ Горизонтальная позиция: 216
- СТАРАЯ Вертикальная позиция: 360
- Горизонт: 216
- Верти: 360
- НОВОЕ Горизонтальное положение: 90
- НОВОЕ Вертикальное положение: 360
- Горизонт: 216
- Верти: 360
И если вы инвертируете два сеттера так:
view_scroll.getHorizontalScrollBar().setValue(scrollHoriz);
view_scroll.getVerticalScrollBar().setValue(scrollVerti);
Ты получаешь:
- СТАРАЯ Горизонтальная позиция: 569
- СТАРАЯ Вертикальная позиция: 510
- Гориз: 569
- Верти: 510
- НОВАЯ Горизонтальная позиция: 444
- НОВОЕ Вертикальное положение: 90
- Горизонт: 444
- Верти: 474
Противоположное поведение, но 90 все равно назначается второму бару.
Любые предложения будут более чем приветствоваться. :)