Java: Como desenhar uma sobreposição sem rolagem sobre o ViewPort do ScrollPane?

Gostaria de usar um ScrollPane para exibir uma imagem em sua viewport e também ter uma sobreposição de grade (ou caixa, ou qualquer outro tipo de registro / marcador de local) na imagem. Eu preciso que a sobreposição permaneça fixa durante a rolagem (o que significa que a imagem parece se mover "sob" a sobreposição). Estarei rolando a Visualização na Viewport a uma taxa fixa para fornecer um movimento suave, e a sobreposição fornecerá uma referência a um determinado local dentro da Viewport. Conceitualmente, pense em um grande mapa rolando em um Viewport, e o Viewport tendo um retângulo que não se move (relativo ao próprio Viewport) que marca uma região que pode ser ampliada com base em alguma ação do usuário.

Eu presumo (mas ainda não confirmei) que a implementação ScrollPane manipula a renderização do View de forma eficiente (a partir do backing store, não precisando repintar toda a View (ou mesmo ViewPort) para cada nova exposição parcial) e preferiria não ter que Substituir o método paint ().

Eu olhei para LayerPane e, embora não tenha dominado, parece que esta é uma abordagem de força bruta. O ScrollPane é um componente de um SplitPane e será movido / redimensionado. Espero ter que manter manualmente o relacionamento correto entre o ViewPort e o LayerPane usando o posicionamento absoluto. Estou longe de ser especialista em design e implementação de GUI e tenho certeza de que estou perdendo possibilidades que vão do óbvio ao obscuro e elegante que uma pessoa experiente saberia.

Estou aberto a qualquer sugestão, não apenas ao caminho que comecei a descer. Devo (posso) adicionar um JPanel como um componente no meu SplitPane e, em seguida, adicionar um LayerPane àquele que contém meu ScrollPane e à sobreposição (outro JPanel) em camadas diferentes no LayerPane? Existe funcionalidade no ScrollPane para suportar isso diretamente? Eu olhei os Tutoriais Java Swing e a documentação da API, mas ainda não vi nada.

Obrigado.

ATUALIZAR:

Obrigado pelo link, trashgod. Isso foi muito mais fácil do que eu esperava. Não há necessidade de LayerPane, GlassPane, composição baseada em xor ... Eu não sei porque não me ocorreu tentar substituir o JViewport.paint () para desenhar minha sobreposição - mas com o código abaixo eu validei o conceito me dê o que estou procurando. Apenas use a subclasse do JViewport e faça o que eu queria (neste caso, sobrepondo um retângulo no centro da Viewport enquanto a imagem rola por baixo). Não sou especialista em GUI e a API Java é incrivelmente ampla; Eu não tenho ideia de como vocês mantêm isso tudo na sua cabeça - mas obrigado!

<code>class MyViewport extends JViewport {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.BLACK);
        g2.drawRect(getWidth()/4,getHeight()/4,getWidth()/2,getHeight()/2);
    }
}
</code>

questionAnswers(1)

yourAnswerToTheQuestion