Estou com uma dúvida que está me matando! Não estou conseguindo adicionar um scrollpane ao meu ThumbNail!!
Segue o código:
publicclassThumbNailextendsJPanel{/*Este é o código que eu uso para criar os jpanels que irão compôr meu thumb*/privatevoidajustaImagensThumbNail(){JLabelimg;JLabelnomeImg;JPanelp;BorderLayoutpnlLay;intk=0;for(BufferedImagei:listaBfi){/*Cria o Painel que estará a imagem*/pnlLay=newBorderLayout(0,0);p=newJPanel(pnlLay);configuraMouseListener(p);/*Configura as Labels que serão adicionadas no painel*/img=newJLabel(newImageIcon(i));nomeImg=newJLabel(listaArqImagens.get(k).getName());/*Posiciona corretamente dentro do painel*/p.add(img,pnlLay.CENTER);p.add(nomeImg,pnlLay.SOUTH);add(p);k++;}}privatevoidconfigInicial(){GridLayouttesteLay=newGridLayout(0,2);testeLay.setVgap(20);setLayout(testeLay);JScrollPanepane=newJScrollPane(this);setBorder(BorderFactory.createEtchedBorder());setSize(400,600);DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation(screenSize.width-getWidth(),(screenSize.height-getHeight()+5)/2);}
Debaixo da criação do JScrollPane no metodo da outra classe.
G
Gabriel_Lopes
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…
L
lucas_guj
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?
G
Gabriel_Lopes
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!
L
lucas_guj
Veja se este código ajuda em algo a você:
// Figura 14.21: ComboBoxFrame.java// JComboBox que exibi uma lista de nomes de imagensimportjava.awt.FlowLayout;importjava.awt.Font;importjava.awt.event.ItemListener;importjava.awt.event.ItemEvent;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JComboBox;importjavax.swing.Icon;importjavax.swing.ImageIcon;publicclassComboBoxFrameextendsJFrame{privateJComboBoximagensCombo;// caixa de combinação para armazenar nomes de íconesprivateJLabellabel;// rótulo para exibir ícone selecionadoprivatestaticfinalString[]nomes={"bug1.gif","bug2.gif","travelbug.gif","buganim.gif"};privateIcon[]icones={newImageIcon(getClass().getResource(nomes[0])),newImageIcon(getClass().getResource(nomes[1])),newImageIcon(getClass().getResource(nomes[2])),newImageIcon(getClass().getResource(nomes[3]))};// Construtor ComboBoxFrame adiciona JComboBox ao JFramepublicComboBoxFrame(){super("Testando JComboBox");setLayout(newFlowLayout());imagensCombo=newJComboBox(nomes);// configura JComboBoximagensCombo.setMaximumRowCount(3);// exibe 3 linhasimagensCombo.addItemListener(newItemListener()// classe interna anônima{// trata evento JComboBoxpublicvoiditemStateChanged(ItemEventevento){// determina se o item selecionadoif(evento.getStateChange()==ItemEvent.SELECTED)label.setIcon(icones[imagensCombo.getSelectedIndex()]);}});// fim da chamada para addItemListeneradd(imagensCombo);// adiciona combobox ao JFramelabel=newJLabel(icones[0]);add(label);}}
// Figura 14.22: ComboBoxTeste.java// Testando ComboBoxFrame.importjavax.swing.JFrame;publicclassComboBoxTeste{publicstaticvoidmain(String[]args){ComboBoxFramecomboBF=newComboBoxFrame();comboBF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);comboBF.setSize(350,150);comboBF.setVisible(true);}}
G
Gabriel_Lopes
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!
L
lucas_guj
O que seria mostrar no seu Thumb? voce quer colocar o scroll no panel, jframe, onde?
G
Gabriel_Lopes
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.
porque no meu código, este p é apenas um painel dos vários que conterão as Imagens
L
lucas_guj
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
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);
}
G
Gabriel_Lopes
Certo, na parte da tarde darei notícias!
Obrigado!
G
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!!
L
lucas_guj
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!!
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
G
Gabriel_Lopes
lucas_guj:
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
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);
}
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…
L
lucas_guj
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
G
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?
L
lucas_guj
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?
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
G
Gabriel_Lopes
aheuaheuaheaheuaheuah, eu ainda estou com problema!! Não foi resolvido ainda!!
L
lucas_guj
Qual o seu problema? Ué você tinha falado que tinha dado certinho. É um problema novo? Mas pelo menos o problema inicial foi resolvido? Tente explicar bem detalhado que as vezes eu sou ruim de entender certas coisas.
G
Gabriel_Lopes
"
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… "
É o problema inicial ainda, eu consegui adicionar o scrollpane só que de fora da classe ThumbNail (que é um panel).
Queria adicionar o scroll de dentro da classe. Fiz o thumbnail como sendo um panel porque achei que fosse o certo.
L
lucas_guj
Gabriel Lopes:
"
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… "
É o problema inicial ainda, eu consegui adicionar o scrollpane só que de fora da classe ThumbNail (que é um panel).
Queria adicionar o scroll de dentro da classe. Fiz o thumbnail como sendo um panel porque achei que fosse o certo.
Claro que dá, ele é um painel vamos dizer pai dos outros paines que vao ter as imagens e o nome da imagem certo? Tem como voce colocar o construtor da classe ThumbNail aqui? aquele metodo private void ajustaImagensThumbNail() é o metodo para criar os outros paineis com imagens certo?
G
Gabriel_Lopes
public ThumbNail(List<File> imagens,String desc, int h, int w,Controlador c) {
control = c;
altura = h;
largura = w;
listaArqImagens = imagens;
listaImagens = apanhaImagens();
descricao = desc;
listaBfi = apanhaListaThumbNail(listaImagens);
configInicial();
ajustaImagensThumbNail();
}
/*ConfigInicial*/
private void configInicial() {
GridLayout testeLay = new GridLayout(0, 2);
testeLay.setVgap(20);
setLayout(testeLay);
setBorder(BorderFactory.createEtchedBorder());
setSize(400, 600);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setLocation(screenSize.width-getWidth(), (screenSize.height-getHeight()+5)/2);
}
L
lucas_guj
Tente no construtor:
add( new JScrollPane(this) );
configInicial();
ajustaImagensThumbNail();
G
Gabriel_Lopes
adding container’s parent to itself
L
lucas_guj
E assim? No construtor.
JScrollPane rollover = new JScrollPane();
rollover.setViewportView(this);
Ta foda isso ai heim AHSDUIOHASIDHIASHD…To te ajudando mas to aprendendo junto contigo.
L
lucas_guj
Cara é porque eu to estudando para concurso e te ajudando ao mesmo tempo aqui senão ja tinha lido a classe na API Java e visto como resolver isso.
L
lucas_guj
E mostra como seu código todo está agora porque já ate me perdi de quantas alterações você fez ai.
G
Gabriel_Lopes
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packageGUI;importGUI.Interpretador;importcontrol.Controlador;importjava.awt.*;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importjava.util.logging.Level;importjava.util.logging.Logger;importjavax.imageio.ImageIO;importjavax.swing.*;importjavax.swing.border.BevelBorder;importjavax.swing.border.EtchedBorder;importmodelo.Debug;/** * * @author GABRIEL */publicclassThumbNailextendsJPanel{privateComponentc;privateList<File>listaArqImagens;privateList<Image>listaImagens;privateList<BufferedImage>listaBfi;privateintaltura,largura;privateStringdescricao;privateSlideShowslide;privateControladorcontrol;privateJPanelpnlThumb;publicThumbNail(List<File>imagens,Stringdesc,inth,intw,Controladorc){control=c;altura=h;largura=w;listaArqImagens=imagens;listaImagens=apanhaImagens();descricao=desc;listaBfi=apanhaListaThumbNail(listaImagens);JScrollPanep=newJScrollPane();p.setViewportView(this);configInicial();ajustaImagensThumbNail();}privateList<Image>apanhaImagens(){List<Image>t=newArrayList<Image>();for(Filef:listaArqImagens){if(f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")){try{t.add(ImageIO.read(f));}catch(IOExceptionex){Logger.getLogger(Interpretador.class.getName()).log(Level.SEVERE,null,ex);control.exit(ex);}}}returnt;}privatevoidajustaImagensThumbNail(){JLabelimg;JLabelnomeImg;JPanelp;BorderLayoutpnlLay;intk=0;for(BufferedImagei:listaBfi){/*Cria o Painel que estará a imagem*/pnlLay=newBorderLayout(5,0);p=newJPanel(pnlLay);configuraMouseListener(p);/*Configura as Labels que serão adicionadas no painel*/img=newJLabel(newImageIcon(i));nomeImg=newJLabel(listaArqImagens.get(k).getName());/*Posiciona corretamente dentro do painel*/p.add(img,pnlLay.WEST);p.add(nomeImg,pnlLay.SOUTH);add(p);k++;}}privatevoidconfiguraMouseListener(Componentc){c.addMouseListener(newMouseAdapter(){@OverridepublicvoidmouseClicked(MouseEventevt){JPanelpanel=(JPanel)evt.getSource();JLabellabel=(JLabel)panel.getComponents()[0];ImageIconi=(ImageIcon)label.getIcon();slide=newSlideShow(listaImagens,3000,i.getImage(),control);}});}publicImageampliaImagem(Imageimg){returnimg;}privateList<BufferedImage>apanhaListaThumbNail(List<Image>imagens){BufferedImagebf,tmp;Graphics2Dgraphics;List<BufferedImage>listaBfi=newArrayList<BufferedImage>();for(Imagei:imagens){/* * Cria um objeto afim de desenhá-lo, com mesmas proporções da imagem */bf=newBufferedImage(largura,altura,BufferedImage.TYPE_INT_RGB);graphics=bf.createGraphics();/* * Desenha a imagem no objeto bf */graphics.drawImage(i,0,0,largura,altura,null);listaBfi.add(bf);}returnlistaBfi;}privatevoidconfigInicial(){GridLayouttesteLay=newGridLayout(0,2);testeLay.setVgap(20);setLayout(testeLay);setBorder(BorderFactory.createEtchedBorder());setSize(400,600);DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation(screenSize.width-getWidth(),(screenSize.height-getHeight()+5)/2);}}
G
Gabriel_Lopes
Nada… tou pelejando aqui também.
L
lucas_guj
CAra uma pergunta bem básica, esse ThumbNail que é um painel não está contido em um JFrame não? Se estiver, coloca o código do JFrame ai.
G
Gabriel_Lopes
Ele é um pane exatamente para ser adicionado por um frame.
A Classe interpretador faz isso com aquele código exibeGUI() que já mencionei aqui…
Cara, acho que vou deixar assim mesmo…
Eu queria já enviá-lo com scroll porque ficaria melhor, já que transformarei-o em lib… pois foi um grande problema pra mim fazer ThumbNail…