2016-05-31 2 views
1

У меня есть довольно странная проблема или вопрос с методом paint(): Я деблокирую какое-то приложение частью, которая визуализирует стек изображений. Вы можете перемещаться по этому стеку с помощью клавиатуры и мыши, чтобы увидеть каждое изображение. Одним из требований является то, что вы должны иметь возможность видеть каждое изображение, даже если вы быстро перемещаетесь по этому стеку. Чтобы доказать, что я добавил несколько выходных данных журнала в свой метод paint(), чтобы увидеть, какое изображение отображается, и все выглядело нормально. Затем я захватил одну быструю навигацию с (программным) видео захватчиком с монитора, с достаточной частотой кадров, чтобы увидеть в записанном видео, что несколько изображений пропускаются (видео всегда содержит пару кадров для каждого изображения, которое было показанный на мониторе). Я тестировал некоторые другие видеографы с тем же результатом. Мне кажется, что даже если метод paint() был вызван фактически для каждого изображения, выход монитора пропускал некоторые из них. Как я могу избежать этого? Надеюсь, вы сможете понять мою проблему, и для этого приложения это настоящая проблема.Как убедиться, что каждый вызов paint() действительно виден на мониторе

Заранее спасибо за любые подсказки, Энди

+1

Интересное требование ... это действительно о людях ** вид ** все изображения? Мне интересно, какой смысл он отображать для всех изображений, когда можно прокручивать так быстро, что вам нужен захват видео, чтобы попасть в эту «проблему» ... – GhostCat

+0

Ну, это «закон», а не наше собственное требование. Это медицинское приложение для сообщения медицинских изображений, и вам действительно нужно обязательно отображать каждое изображение данного стека. – Coffeepot

+0

еще один момент заключается в том, что даже видео не видит все изображения, потому что (почти все) видео используют сжатие. сжатые видео могут пропускать кадры, например. (см. https://en.wikipedia.org/wiki/Lossy_compression#Video) –

ответ

1

после краски вы должны вызвать перепроверить на component.Then изменения вступят в силу.

+0

Спасибо, я попробую! – Coffeepot

+0

Можете ли вы объяснить, почему и как этот код поможет в решении проблемы? что делает 'revalidate()' do, когда 'repaint()' не делает? (без обид, я очень заинтересован) –

+0

видя http://stackoverflow.com/questions/1097366/java-swing-revalidate-vs-repaint, это кажется немного запутанным для меня - на чем влияет макет? –

0

смотрит в documentation on painting мы можем видеть на заметке:

NOTE: If multiple calls to repaint() occur on a component before 
the initial repaint request is processed, the multiple requests may 
be collapsed into a single call to update(). The algorithm for 
determining when multiple requests should be collapsed is 
implementation-dependent. If multiple requests are collapsed, the 
resulting update rectangle will be equal to the union of the rectangles 
contained in the collapsed requests. 

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

кажется, что вы приняли меры, и когда я прочитал это право документации, вы должны указать update() компонент явно после вызова repaint().

+0

честно: я havent попробовал, так как у меня нет приложения, чтобы протестировать его ни на видеограбщике, чтобы документировать его - я просто ** читаю ** документацию ... –

+0

Конечно, вызов repaint() соберет несколько но мы вызываем метод paint() непосредственно с правильным графическим объектом из графического интерфейса. В противном случае для нас невозможно было бы сделать кино. Нехорошо, я знаю. – Coffeepot

+0

Благодарим вас за предоставление этой информации ... я могу копать глубже ... –

Смежные вопросы