用Java显示图像

用Java显示图像,java,arrays,image,swing,io,Java,Arrays,Image,Swing,Io,我正在使用java开发windows版本的桌面应用程序。在我的应用程序中,需要使用“下一步”和“上一步”按钮显示路径中的图像 为此,我编写了一个类来返回图像的所有路径:我使用ArrayList import java.io.File; import java.util.ArrayList; public class RE { private ArrayList<String> c =new ArrayList<String>(); public RE (Str

我正在使用java开发windows版本的桌面应用程序。在我的应用程序中,需要使用“下一步”和“上一步”按钮显示路径中的图像

为此,我编写了一个类来返回图像的所有路径:我使用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;


}
}
导入java.io.File;
导入java.util.ArrayList;
公共类RE{
private ArrayList c=new ArrayList();
公共RE(字符串代表)
{
文件src=新文件(rep);
如果(src!=null&&src.exists()&&src.isDirectory())
{
String[]tab=src.list();
如果(制表符!=null)
{
用于(字符串s:选项卡)
{
File srcc=新文件(rep+File.separatorChar+s);
if(srcc.isFile())
{  
如果(srcc.getName().matches(“.*”+“png$”)| | srcc.getName().matches(“.*”+“jpg$”)| | srcc.getName().matches(“.*”+“gif$”)
c、 添加(srcc.getPath());
}
}
}
}
}
公共数组列表getAll()
{
返回c;
}
}
和一个显示图像的类,但我在操作中遇到了一些问题

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
        {

        }

    }

}
导入java.awt.BorderLayout;
导入java.awt.FlowLayout;
导入java.awt.Image;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ListIterator;
导入javax.swing.*;
公共类swing扩展JFrame实现ActionListener{
私人RE c=新RE(“H:\\photos\\g”);
JTextField chemin=新的JTextField(30);
JLabel实验室;ImageIcon ImageIcon;
JButton next=新JButton(“next”);
JButton prev=新JButton(“prev”);
JPanel pan1=新的JPanel();
JPanel pan2=新的JPanel();
JPanel pan3=新的JPanel();
swing()
{
imageIcon=新的imageIcon(c.getAll().get(2));
lab=新的JLabel(图像图标);
此.setLayout(新的BorderLayout());
此.setVisible(true);
pan1.setLayout(新的FlowLayout());
第1栏添加(新的JLabel(“汇总表”);
pan1.添加(化学试剂);
pan2.setLayout(新的FlowLayout());
第2栏添加(实验室);
pan3.setLayout(新的FlowLayout());
next.addActionListener(这个);
prev.addActionListener(本);
pan3.add(上一页);pan3.add(下一页);
添加(pan1,BorderLayout.NORTH);
添加(第2窗格,BorderLayout.CENTER);
添加(pan3,BorderLayout.SOUTH);
这个包();
}
公共静态void main(字符串[]args){
新swing();
}
@凌驾
已执行的公共无效操作(操作事件e){
如果(如getSource()==next)
{
字符串cur=imageIcon.toString();
ListIterator l=c.getAll().ListIterator(c.getAll().indexOf(cur));
lab.setIcon(新图像图标(l.previous().toString());
}
其他的
{
}
}
}
但我无法完成:

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){
如果(如getSource()==next)
{
字符串cur=imageIcon.toString();
ListIterator l=c.getAll().ListIterator(c.getAll().indexOf(cur));
lab.setIcon(新图像图标(l.previous().toString());
}
其他的
{
}
}

使用适当的布局管理器。在这种情况下,请使用。这将使图像交换更容易。除非图像数量大得离谱,否则我强烈推荐这种方法。

使用
列表
构建相应的
列表
,并根据需要替换标签图标。在这种情况下,
JComboBox
保存当前选择,按钮相应地更改选择。请注意,索引环绕在一起,形成一个循环队列。

准确地说明您在显示图像时面临的问题。为了更快地获得更好的帮助,请发布一个。我不知道您的问题是什么。但仍然可能是肯定的,但我可以完成public void actionPerformed(ActionEvent e){if(e.getSource()==next){String cur=imageIcon.toString();ListIterator l=c.getAll().ListIterator(c.getAll().indexOf(cur));lab.setIcon(new imageIcon(l.previous().toString());}else{}}通过使用前面提到的布局管理器,垃圾逻辑是不必要的。您确实需要封装逻辑。+1我以前忽略了这有多容易,例如,让每个人负责自己的映像。