Estrutura redimensionavel

olá, eu tenho um JInternalFrame e dentro dele eu preciso mostar uma imagem dentro de um quadrante, mas eu preciso que esse quadrante seja redimensionável.
alguém sabe se existe alguma estrutura do swing que seja capaz de mostar uma imagem, e que seja redimensionável?
obrigada?

Use um JImagePanel: http://www.guj.com.br/posts/list/56248.java

E coloque-o dentro de uma área com splitpanes:
http://download.oracle.com/javase/tutorial/uiswing/components/splitpane.html

Então vini, mas eu não entendi muito bem como funciona a sua classe.
Qual construtor eu devo usar?
E depois dele? eu devo usar o metodo drawImage pra redimensionar?
Obrigada

Ele é um JPanel com uma imagem dentro.
Você pode usar qualquer um dos construtores. Talvez os mais fáceis sejam os que usam um file ou uma string com o nome do arquivo de entrada.

Mas, se você já tem uma BufferedImage carregada, poderia usa-lo passando a imagem direto.

Não precisa chamar nada. Uma vez na tela, o painel exibe a imagem. Se você esticar o painel, a imagem estica junto, sozinha. Por isso, basta usar os splitpanes e deixar que o painel cresça sozinho, redimensionado pelo próprio layout manager.

eu coloquei ela uma jframe… deu certo… mas o q vc quis dizer em : “E coloque-o dentro de uma área com splitpanes”?

Você não leu o link que passei?

O SplitPane permite que você divida o seu JFrame em várias áreas, todas redimensionáveis. Veja:
http://download.oracle.com/javase/tutorial/uiswing/components/splitpane.html

ah sim!!! Valeu Vini!!! Funciounou direitinho!!

Então, eu essa classe faz com que a imagem cresça junto com a janela, ou seja, a escala da imagem aumenta proporcionalmente com a janela.Porém, o que na verdade eu preciso é o seguinte:
Suponhamos que eu tenha uma imagem de 1000px x 1000px e eu quero coloca-la dentro de um JInternalFrame, dentro de uma estrutura de 300px X 300px e use scrolls verticais e horizontais para percorrer toda a area da figura. Até aí eu até sei fazer… mas o que eu preciso realmente além disso é a possibilidade de quando eu redimensionar o meu JInternalFrame a imagem vá crescendo junto com a janela, até q não seja mais necessario os uso dos scrolls, ou seja até ela atingir o tamanho maximo da minha imagem. A escla nunca deve se mudar, ou seja, a minha imagem deve permancer sempre na escala 1:1, entende?
Obrigada

Não entendi. É para a imagem crescer ou não?

O que eu entendi é que você não quer distorcer a proporção da imagem, certo?
Ou seja, se for para ela diminuir ou aumentar, deve ser proporcionalmente entre o x e o y. Isso é fácil de fazer.

Mas, não entendi onde as scrollbars entram na história. Se a imagem vai redimensionar, elas nunca apareceriam. Ou você quer fixar um tamanho mínimo para a imagem?

Então, a imagem a principio deve estar dentro de uma estrutura de 300px X 300px, soh q a imagem tem 1000px x 1000px, por isso que eu preciso dos scrolls… Só que quando eu aumentar a janela essa estrutura de 300px tb vai aumentar até chegar ao tamanho da imagem total. Somente a estrutura inicial cresce, a imagem não…A imagem sempre vai ter 1000 px por 1000 px, a unica coisa que deve acontecer é q a estrutura onde ela esta colocada vai crescer ou diminuir proporcionalmente com o JInternalFrame, o que ocasiona a aumento ou a diminuição da area visivel da imagem, entende?

Entendi. Mas nesse caso o ScrollPane já resolve sozinho.
Basta fazer o setPreferredSize do painel para o tamanho desejado.

Se for menor que isso, o scrollpane colocará as barras de rolagem. Como você também não quer que a imagem cresça, troque o FillType do JImagePanel para center. Assim, quando ele ficar maior que 1000x1000, a imagem só será centralizada no painel:

Mas seu eu usar o setPreferdSize, a minha estrutura inicial vai ter o tamanho que eu setei, não vai? Eu preciso q inicialmente a estrura tenha 300 por 300 e ela cresça a medida que eu redimensiono a janela. Quando eu aumento a janela a estrutura cresce ate atingir o tamanho de 1000 x 1000. Tem q haver uma sintonia entre o crescimento da janela e o crescimento da estrutura.

Eu preciso quase do que vc fez naquela classe que vc postou. Mas ao inves da imagem crescer junto com a janela, eu preciso q apenas a estrutura que quarda a imagem cresca e com isso aumente a area visivel da figura.

Ninguém mais?

Não. Você vai definir o preferredSize no ImagePanel. Mas vai definir o tamanho 300x300 na janela. O que acontece então? Como a janela é menor que o JImagePanel, o scrollpane entra em ação. Se seu usuário redimensionar a janela, só o scrollpane vai mudar de tamanho.

Aliás, o grande papel do Scrollpane é fazer exatamente o que você quer. Impedir que um determinado componente fique menor que um tamanho mínimo, mesmo que isso represente exibi-lo com barras de rolagem.

Então, acho q eu ainda não expliquei bem o que eu quero. Tô passando uma imagem para exemplificar melhor. Como pode ser visto na imagem, eu tenho um JInternalFrame que tem uma tabela no canto esquerdo, uma JArea no canto inferior, cinco JButtonse e finalmente,uma area, que tem um tamanho inicial definido e que tem uma foto de umas bexigas. Eu quero que quando eu aumentar o meu JinternalFrame, a area de onde está as bexigas fique maior permitindo assim que toda a foto das bexigas fique visivel. Mas que apneas essa area se maximize junto com o JInternalFrame. A tabela, os botões, enfim, todo o resto que está contido também no JInternalFrame continue do mesmo tamanho. A unica coisa que eu quero q fiqua maior quando eu aumentar a janela é area de onde está a figura.

A area tem q aumentar junto com a janela, quando está é redimensionada
:slight_smile:


Que gerenciador de layout vc usa?

setLayout(null);
ou seja, nenhum

Com setLayout(null) nada é redimensionável. Por isso insistimos tanto para que o pessoal use os gerenciadores de layout. Eles é que fazem os componentes se redimensionarem com o arrasto.

Dê uma pesquisada sobre isso.
http://download.oracle.com/javase/1.4.2/docs/api/java/awt/LayoutManager.html

Uma boa opção é usar o MigLayout:
http://www.miglayout.com/

mas se eu usar um desses layouts todos os componentes do JInternalFrame vão se modificar. Eu quero q apenas um elemento seja redimensionado e não todos!!!