отображать изображение на Java - PullRequest
2 голосов
/ 25 декабря 2011

Я работаю над настольным приложением для версии Windows, используя Java.В моем приложении есть требование отображать ИЗОБРАЖЕНИЯ из Path с помощью следующей и предыдущей кнопки.

Для этого я написал класс для возврата всех путей к изображениям: я использую ArrayList

import java.io.File;
import java.util.ArrayList;


public class RE {
    private ArrayList<String> c =new ArrayList<String>();
public RE (String rep)
{
    File src=new File(rep);
    if(src!=null && src.exists() && src.isDirectory())
    {
        String[] tab=src.list();
        if(tab!=null)
        {
        for(String s:tab)
        {
            File srcc=new File(rep+File.separatorChar+s);
            if(srcc.isFile())
            {  
                if(srcc.getName().matches(".*"+"png$")|| srcc.getName().matches(".*"+"jpg$") || srcc.getName().matches(".*"+"gif$"))
                c.add(srcc.getPath());
            }

        }
        }
    }
}

public ArrayList<String> getAll()
{
    return c;


}
}

и класс для отображения изображений, но у меня есть некоторые проблемы в ActionPerformed

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ListIterator;

import javax.swing.*;


public class swing extends JFrame implements ActionListener{
    private RE c=new RE("H:\\photos\\g");
    JTextField chemin=new JTextField(30);
    JLabel lab;ImageIcon imageIcon;
    JButton next =new JButton("NEXT");
    JButton prev=new JButton("prev");
    JPanel pan1=new JPanel();
    JPanel pan2=new JPanel();
    JPanel pan3=new JPanel();
     swing()
     {
         imageIcon = new ImageIcon(c.getAll().get(2));
         lab = new JLabel(imageIcon);
         this.setLayout(new BorderLayout());
         this.setVisible(true);
         pan1.setLayout(new FlowLayout());
         pan1.add(new JLabel("ENTREZ LE CHEMIN DE REPERTOIRE :"));
         pan1.add(chemin);

         pan2.setLayout(new FlowLayout());
         pan2.add(lab);


         pan3.setLayout(new FlowLayout());
         next.addActionListener(this);
         prev.addActionListener(this);
         pan3.add(prev); pan3.add(next);


         this.add(pan1,BorderLayout.NORTH);
         this.add(pan2,BorderLayout.CENTER);
         this.add(pan3,BorderLayout.SOUTH);
         this.pack();
     }


     public static void main(String[] args){
         new swing();
     }


    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==next)
        {
        String cur=imageIcon.toString();
        ListIterator<String> l=c.getAll().listIterator(c.getAll().indexOf(cur));
        lab.setIcon(new ImageIcon(l.previous().toString()));
        }
        else
        {

        }

    }

}

, но я не могу выполнить это:

public void actionPerformed(ActionEvent e) {
        if(e.getSource()==next)
        {
        String cur=imageIcon.toString();
        ListIterator<String> l=c.getAll().listIterator(c.getAll().indexOf(cur));
        lab.setIcon(new ImageIcon(l.previous().toString()));
        }
        else
        {

        }

    }

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

Используйте ваш List<String> для создания соответствующего List<ImageIcon> и замените значок метки, как требуется.В этом примере a JComboBox содержит текущий выбор, и кнопки соответственно изменяют выбор.Обратите внимание, что индексы оборачиваются, образуя круговую очередь.

3 голосов
/ 25 декабря 2011

Используйте соответствующий менеджер раскладки. В этом случае используйте CardLayout. Это облегчит обмен изображениями. Если количество изображений не является абсурдно большим, я настоятельно рекомендую этот подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...