用Java显示图像
我正在使用java开发windows版本的桌面应用程序。在我的应用程序中,需要使用“下一步”和“上一步”按钮显示路径中的图像 为此,我编写了一个类来返回图像的所有路径:我使用ArrayList用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
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我以前忽略了这有多容易,例如,让每个人负责自己的映像。