Pergunta

Eu criei um costume JPanel que exibe imagens (vamos chamá -lo MyPanel), Eu adicionei isso para JFrameContentPane.

Eu quero JFrame para ser redimensionado automaticamente para ajustar o MyPanel Quando a imagem muda.

Parece que preciso ligar frame.pack() para fazer isso. Chamando pack() a partir de MyPanel Aumenta o acoplamento, então não quero fazer isso.

Para resolver o problema que estendei JFrame (vamos chamá -lo MyFrame) e feito MyFrame observador, e MyPanel observável. Sempre que a imagem MyPanel está exibindo mudanças, notifica os ouvintes, MyFrame Para esta instância. E depois MyFrame chamadas pack() quando recebe a notificação.

Existe uma maneira mais suave de redimensionar JFrame De acordo com seu conteúdo?

Foi útil?

Solução

A solução que você descreveu parece razoável.

Como alternativa, sempre que o MyPanel altera sua imagem, ele pode encontrar seu quadro pai e depois ligar para o pacote (). Se não existir esse quadro, não faça nada. Não há necessidade de criar classes adicionais, e é tão solto um acoplamento quanto você receberá. Você pode usar Swingutilities.getancestorofclass () para fazer isso facilmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top