日期:2014-05-20  浏览次数:20719 次

Java Swing 图片浏览器 BUG 求援
是getListAction的问题。
第一次对image1文件夹用‘图像列表’时getListAction里的(全局变量)s2的值为path1(文件夹image1的路径为path1),在列表里点过再隐藏上后(再点一次‘图像列表’),第二次打开文件夹image2,对文件夹image2用‘图像列表’getListAction里的(全局变量)s2的值为传进去时还是path2(文件夹image2的路径为path2),但点过列表项后,s2的值莫名其妙的从path2变成了path1,没有再传过参,s2是个全局变量值在调用getListAction后也没有再动过,可为什么还会变啊??真的很纠结,救援助。

截图:




getListAction代码:
Java code
package Bin;

import javax.swing.JList;
import java.io.File;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

public class getListAction implements photoAction,ListSelectionListener
{
    int m;//记录进入该方法的次数,奇数次‘显示列表’,偶数次‘关闭列表’
    int j;
    JList list;//列表
    JLabel label;//存放图片的标签
    String []s1;//图片列表
    String s2;//图片所在文件夹的路径
    
    public getListAction(int m,JList list,String []s1,JLabel label,String s2)//传参
    {
        this.m=m;
        this.s1=s1;
        this.list=list;
        this.label=label;
        this.s2=s2;
    } 
    
    public int action()//m初始为0,由photo传进来的
    {
        if(m%2==0)//显示列表
        {
            list.setListData(s1);
            if(m==0)
            {
                list.setSelectedIndex(1);
            list.addListSelectionListener(this);
            }
        }
        else if(m%2!=0)//关闭列表
        {
            String []s={""};
            list.setListData(s);
        }
        m=m+1;
        return m;
    }
    
    public void valueChanged(ListSelectionEvent e)//响应监听
    {
        String s3=s2;//[b]这里的s2莫名其妙的改掉了,改成了第一次读取的文件夹路径[/b]
        j=list.getAnchorSelectionIndex();
        String ss=s3+"\\"+s1[j];
        System.out.println(s3+"s3=valueChanged");
        System.out.println(s2+"s2=valueChanged");
        label.setIcon(new ImageIcon(ss));
    }
}



这部分代码不够的话,请加qq1535976313,求现场解惑!

------解决方案--------------------
图片浏览器我曾经做过,
可以实现图片放大,缩小,浏览什么的,旋转没做。
挺简单的。

我是采用的model1模式来做的,也就是一个模型,可以用文件来表示图片,那么图片对象就不用抽象了,
直接就是File,但是呢,必须有一个图片工具类,用来从容器中浏览下一张,上一张,然后就是界面了,
界面做玩后,就可以写listener,按钮的监听器,也就是我们所说的控制层,
整个应用采用mvc三层架构,
还是比较简单的。