JScrollPane

3 respostas
S

Criei uma Classe para listar imagens gif de um diretório, para selecioná-las e tal…
Estou alocando vários Label’s com ícones para isso…
mas quando executo ele aloca infinitamente pra baixo e não deixa uma barra de rolamento… para que eu posso ver as imagens pra baixo… não consegui usar o JScrollPane (ele aparece por cima das imagens)
alguma ajuda?

public class NewClass {  
    MouseAdapter iconMA;  
            final JFrame frame = new JFrame();  
              
    NewClass()  
    {  
          
        frame.setSize(1000, 500);  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                   
        int j=0;  
         File root = new File("Fundos");    
         File[] files = root.listFiles( new NewClass.FileImageFilter());   
         for (int i = 0; i < files.length; i++) {    
            ImageIcon ixi = new ImageIcon("Fundos\" + files<i>.getName());  
            ixi.setImage(ixi.getImage().getScaledInstance(140, 100, 0));  
            createJLabel(files<i>.getName(), j, 0,ixi);  
            j++;  
         }  
         frame.setVisible(true);  
  
    }  
      
        private void createJLabel(String text, int x, int y,ImageIcon ixi) {    
        final JLabel label = new JLabel();  
        frame.add(label);  
        label.setName(text);  
        label.setIcon(ixi);  
          
        label.setBounds(x*140,0, 140, 100);          
          
        iconMA = new MouseAdapter() {  
            @Override  
            public void mouseClicked(MouseEvent me) {  
                super.mouseClicked(me);  
                //*************//
            }  
        };  
        label.addMouseListener(iconMA);       
}

3 Respostas

ViniGodoy

Crie o JScrollPane, ponha sobre ele um painel, e adicione as imagens no painel:

public class NewClass {  
    private MouseAdapter iconMA;  
    private final JFrame frame = new JFrame();  
    private final JPanel pnlImagens = new JPanel();
              
    public NewClass() {  
        frame.setSize(1000, 500);  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        pnlImagens.setLayout(null); 

        int j=0;  
        File root = new File("Fundos");    
        File[] files = root.listFiles( new NewClass.FileImageFilter());   
        for (File file : files) {    
            ImageIcon icon = new ImageIcon("Fundos\" + file.getName());  
            icon.setImage(icon.getImage().getScaledInstance(140, 100, 0));  
            createJLabel(file.getName(), j, 0,icon);  
            j++;
        }  
        JScrollPane scroll = new JScrollPane(pnlImagens);
        frame.add(scroll);
        frame.setVisible(true);  
    }  
      
    private void createJLabel(String text, int x, int y,ImageIcon ixi) {    
        final JLabel label = new JLabel();    
        label.setName(text);  
        label.setIcon(ixi);            
        label.setBounds(x*140,0, 140, 100);
        pnlImagens.add(label);

        iconMA = new MouseAdapter() {  
            @Override  
            public void mouseClicked(MouseEvent me) {  
                super.mouseClicked(me);  
                //*************//
            }  
        };  
        label.addMouseListener(iconMA);       
    }
}
S

Funcionou (primeiro passo… obrigado -)… mas a barra não ta mexendo… não consigo visualizar as imagens de baixo

dês de já… grato!!

ViniGodoy

Você colocou na ordem que deixei também? Veja que coloquei o Scrollpane por último. Isso porque, é importante que ele conheça o tamanho final do JPanel antes de formar a barra.

Caso contrário, você terá que chamar o método revalidate() no JPanel (para ele recalcular sua área).

Criado 28 de junho de 2014
Ultima resposta 30 de jun. de 2014
Respostas 3
Participantes 2