[Resolvido]Adicionar ScrollPane a um JPanel

Eaí GUJZeiros, beleza?

Estou com uma dúvida que está me matando! Não estou conseguindo adicionar um scrollpane ao meu ThumbNail!!

Segue o código:

[code]public class ThumbNail extends JPanel {

/Este é o código que eu uso para criar os jpanels que irão compôr meu thumb/
private void ajustaImagensThumbNail(){

    JLabel img;
    JLabel nomeImg;
    JPanel p;
    BorderLayout pnlLay;
    int k = 0;
    
    for (BufferedImage i : listaBfi) {
        /*Cria o Painel que estará a imagem*/
        pnlLay = new BorderLayout(0, 0);
        p = new JPanel(pnlLay);
        configuraMouseListener(p);
        
        /*Configura as Labels que serão adicionadas no painel*/
        img = new JLabel(new ImageIcon(i));  
        nomeImg = new JLabel(listaArqImagens.get(k).getName());
        
        /*Posiciona corretamente dentro do painel*/
        p.add(img,pnlLay.CENTER);
        p.add(nomeImg,pnlLay.SOUTH);
        
        add(p);
        k++;           
    }
}

private void configInicial() {
    GridLayout testeLay = new GridLayout(0, 2);
    testeLay.setVgap(20);
    setLayout(testeLay);
    
    JScrollPane pane = new JScrollPane(this);
    setBorder(BorderFactory.createEtchedBorder());
    setSize(400, 600);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   setLocation(screenSize.width-getWidth(), (screenSize.height-getHeight()+5)/2);        
} [/code]

[code]/Este é o método que chamará meu thumb de outra classe/

private void exibeGUI(){
JFrame tmp = new JFrame();
tmp.setSize(1024,768);
ThumbNail thumb = new ThumbNail(listaImagens,parametros[2], 120, 100,control);
tmp.add(thumb,BorderLayout.EAST);

    tmp.setLocationRelativeTo(null);
    
    tmp.setVisible(true);
}[/code]

Obrigado!!

Tenta adicionar essa linha:

p.add( pane() ); 

Debaixo da criação do JScrollPane no metodo da outra classe.

Tipo, no meu caso, a própria classe adicionaria o pane, mas não daria problema não?

Tipo

add(pane);
já que usei o objeto thumb para criar o scrollpane.

Enfim, o que fiz anteriormente foi algo parecido: eu criei um objeto panel, o qual eu construía o thumb em cima dele, ao final eu criava o scrollpane e fazia isso que tu tá dizendo, e só depois eu dava o

add(thumb);

msm assim, não funcionou…

Se tiver como posta o codigo todo, das duas classes aqui, se tiver como não ser tudo ta tranquilo, mas tenta pelo menos postar só o essencial para eu compilar e analisar aqui. Se eu demorar a responder é porque estou ocupado no momento. Flw?

Para este código funcionar, basta criar uma classe que estenda jpanel e fazer pequenas adptações, não mando o código porque estou no trabalho agora…

Mas, se tu criar uma List de objetos Image, ele vai pegar.

Chegar em ksa eu mando!

Veja se este código ajuda em algo a você:

// Figura 14.21: ComboBoxFrame.java
// JComboBox que exibi uma lista de nomes de imagens
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.Icon;
import javax.swing.ImageIcon;

public class ComboBoxFrame extends JFrame
{
	private JComboBox imagensCombo; // caixa de combinação para armazenar nomes de ícones
	private JLabel label; // rótulo para exibir ícone selecionado
	
	private static final String[] nomes =
		{ "bug1.gif", "bug2.gif", "travelbug.gif", "buganim.gif" };
	private Icon[] icones = {
		new ImageIcon( getClass().getResource(nomes[0]) ),
		new ImageIcon( getClass().getResource(nomes[1]) ),
		new ImageIcon( getClass().getResource(nomes[2]) ),
		new ImageIcon( getClass().getResource(nomes[3]) ) };
		
	// Construtor ComboBoxFrame adiciona JComboBox ao JFrame
	public ComboBoxFrame()
	{
		super( "Testando JComboBox" );
		setLayout( new FlowLayout() );
		
		imagensCombo = new JComboBox( nomes ); // configura JComboBox
		imagensCombo.setMaximumRowCount( 3 ); // exibe 3 linhas
		
		imagensCombo.addItemListener(
			new ItemListener() // classe interna anônima
			{
				// trata evento JComboBox
				public void itemStateChanged( ItemEvent evento )
				{
					// determina se o item selecionado
					if( evento.getStateChange() == ItemEvent.SELECTED )
						label.setIcon( icones[ imagensCombo.getSelectedIndex() ] );
				}
			}
		); // fim da chamada para addItemListener
		
		add( imagensCombo ); // adiciona combobox ao JFrame
		label = new JLabel( icones[0] );
		add( label );
	}
}
// Figura 14.22: ComboBoxTeste.java
// Testando ComboBoxFrame.
import javax.swing.JFrame;

public class ComboBoxTeste
{
	public static void main( String[] args )
	{
		ComboBoxFrame comboBF = new ComboBoxFrame();
		comboBF.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		comboBF.setSize( 350, 150 );
		comboBF.setVisible( true );
	}
}

tô ligado combobox, mas não é minha solução não… valeu mesmo assim!

É só por que as vezes tem muitas imagens para mostrar no thumb, e não queria redimensioná-las, mantendo assim um tamanho fixo; e para mostrar todas preciso de um scroll!

O que seria mostrar no seu Thumb? voce quer colocar o scroll no panel, jframe, onde?

Eu tenho:

1 - Frame (Interpretador)
2 - ThumbNail (Painel de imagens alinhadas 2 a 2 com indefinidas fileiras de imagens, que sao lidas e agrupadas num List e posteriormente passadas como parâmetro).

Então, por serem indefinidas, podem não caber na tela, e para isso preciso do scroll…

Por fim, depois de o thumbnail está criado e configurado, ele será adicionado ao Interpretador.

Remova essa linha

JScrollPane pane = new JScrollPane(this); 

E tente

private void ajustaImagensThumbNail(){
//...........seu codigo
add( new JScrollPane(p) );
k++;
}

esse p aí é o que? O Painel do thumb?

porque no meu código, este p é apenas um painel dos vários que conterão as Imagens

[quote=Gabriel Lopes]esse p aí é o que? O Painel do thumb?

porque no meu código, este p é apenas um painel dos vários que conterão as Imagens
[/quote]

Sim. Tente isso ou entao depois remova essa linha que falei para tentar e tente isso:

private void exibeGUI(){  
        JFrame tmp = new JFrame();  
        tmp.setSize(1024,768);  
        ThumbNail thumb = new ThumbNail(listaImagens,parametros[2], 120, 100,control);  
        tmp.add( new JScrollPane( thumb ), BorderLayout.EAST );  // modifique aqui, não esqueça de importar a classe JScrollPane
          
        tmp.setLocationRelativeTo(null);  
          
        tmp.setVisible(true);  
}

Certo, na parte da tarde darei notícias!

Obrigado!

Veeeio!! Deu certim cara!!

Só que tipo, eu tava querendo adicionar o scrollpane de DENTRO do Thumb, por que vout ransformar em jar depois…

Daí tou tentando aqui :x!!

[quote=Gabriel Lopes]Veeeio!! Deu certim cara!!

Só que tipo, eu tava querendo adicionar o scrollpane de DENTRO do Thumb, por que vout ransformar em jar depois…

Daí tou tentando aqui :x!![/quote]

Qual tentativa que eu passei que funcionou? Coloca aqui para quando alguem tiver a mesma duvida e pesquisar e achar esse tópico souber. Como assim de DENTRO do Thumb? E não esquece de editar seu primeiro post e colocar como resolvido no assunto do topico

[quote=lucas_guj][quote=Gabriel Lopes]esse p aí é o que? O Painel do thumb?

porque no meu código, este p é apenas um painel dos vários que conterão as Imagens
[/quote]

Sim. Tente isso ou entao depois remova essa linha que falei para tentar e tente isso:

private void exibeGUI(){  
        JFrame tmp = new JFrame();  
        tmp.setSize(1024,768);  
        ThumbNail thumb = new ThumbNail(listaImagens,parametros[2], 120, 100,control);  
        tmp.add( new JScrollPane( thumb ), BorderLayout.EAST );  // modifique aqui, não esqueça de importar a classe JScrollPane
          
        tmp.setLocationRelativeTo(null);  
          
        tmp.setVisible(true);  
}

[/quote]

Este método ExibeGUI() está em outra classe, eu queria criar o jscrollpane dentro da própria classe ThumbNail…

Só que não dá porque ela é um panel…

Eu falei para você fazer isso porque voce tinha me falado que seriam varios thumbs então pensei em colocar ai que é na criação do objeto, ai ficaria adicionado em um JScrollPane para cada objeto. Não esqueça de colocar tópico como resolvido. Qualquer coisa que eu puder ajudar eu falo. abraços

Não não… Thumb = painel que contém vários painéis que contem imagem + nome da imagem.

Só terei 1 Objeto thumb… daí eu já queria uqe ele viesse com o jscrollpane!

Entendeu?

[quote=Gabriel Lopes]Não não… Thumb = painel que contém vários painéis que contem imagem + nome da imagem.

Só terei 1 Objeto thumb… daí eu já queria uqe ele viesse com o jscrollpane!

Entendeu?[/quote]

Ahhhh sim, entendi. Minha dificuldade toda em te ajudar foi a interpretação da sua dúvida. aSHDUIOADSHISHAIHDSI…Mas pelo visto consegui ajudar mesmo interpretando errado. Mas agora entendi. Abraços

aheuaheuaheaheuaheuah, eu ainda estou com problema!! Não foi resolvido ainda!!