⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browsing.java

📁 一款手机游戏
💻 JAVA
字号:


import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Font;
import java.util.Enumeration;
import java.util.Vector;

public class Browsing extends Canvas implements Invoker, Runnable {
    private final int WIDTH=176, HEIGHT=220;
    public static final int TYPE_SET_HOMEDIR=3;
    
    private int dirIndex =0;
    private String currentDir="/";
    private Vector dirList = new Vector();
    private int dirSize=0;
    private int lastDirIndex=0;
    public static String fileURL = "file://";
    
    private Image folderImage;
    private Image fileImage;
    private Image downArrowImage;
    private Image upArrowImage;
    private Image bg;
    
    private Font small_Font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
    private Font medium_Font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
    private int font_medium_Height;
    private int font_small_Height;
    private int visibleTopIndex=1;
    private int visibleBottomIndex;
    private int visibleBottomIndex_START;
    
    private Thread thread= null;
    private boolean dirIndexIsSound=false;
    protected FileAction fileAction= null;
	private boolean stopped=false;
    
    public Browsing() {
        setFullScreenMode(true);
        fileAction = new FileAction(this);
        setProperties();
        thread = new Thread(this);
        thread.start();
        new Thread(new Runnable() {
            public void run() {
                fileAction.getDirContent(currentDir);
            }
        }).start();
    }
    
    public void paint(Graphics g) {
        g.drawImage(bg, 0, 0, 0);
        g.setColor(0x00);
        g.setFont(small_Font);
        
        int lastIndex = (visibleBottomIndex+1) < dirSize? visibleBottomIndex+1:dirSize;
        int j = 0;
        //显示结构及文件名
        for(int i = visibleTopIndex; i<lastIndex;++i, j++) {
            if(dirIndex==i) {
                g.setColor(83,148,166);
                g.drawRoundRect(17, font_medium_Height+(j+1)*font_small_Height+1,WIDTH-18, font_small_Height, 4, 2);
            }
            if(i<lastDirIndex)
            	//文件夹
                g.drawImage(folderImage,3,font_medium_Height+(j+1)*font_small_Height+3, 0);
            else
            	//音频文件
                g.drawImage(fileImage,3,font_medium_Height+(j+1)*font_small_Height+3, 0);
            g.drawString((String)dirList.elementAt(i), 19,font_medium_Height+(j+1)*font_small_Height+2, 0);
            g.setColor(0x00);
        }
        //g.setColor(83,148,166);
        //当文件很多屏幕显示不了,则显示箭头
        //visibleBottomIndex为屏幕上最后文件在向量中索引
        if(this.visibleBottomIndex<dirSize-1)//dirSize为向量大小
            g.drawImage(downArrowImage,WIDTH-10,HEIGHT-font_medium_Height*2+8, 0);
        if(this.visibleTopIndex>1)
        //visibleTopIndex为屏幕上第一个文件索引
            g.drawImage(upArrowImage,WIDTH-10,font_medium_Height+10, 0);
    }
    
    public void keyPressed(int key) {
        switch(key) {
            case -1://UP
                if(dirIndex==0)//焦点所在索引
                    return;
                if(visibleTopIndex==0) {
                    dirIndex--;
                    dirIndexIsSound=isSound(((String)dirList.elementAt(dirIndex)));
                } 
                else {
                    dirIndex--;
                    if(dirIndex + 1 == visibleTopIndex) {
                    visibleTopIndex--;
                    visibleBottomIndex--;
                    }
                    dirIndexIsSound=isSound(((String)dirList.elementAt(dirIndex)));
                }
                break;
            case -2://DOWN
                if(dirIndex>=dirList.size()-1)
                    return;
                //焦点不在底部
                else if(visibleBottomIndex>dirIndex) {
                    dirIndex++;
                    dirIndexIsSound=isSound(((String)dirList.elementAt(dirIndex)) );
                } 
                else {
                    dirIndex++;
                    visibleBottomIndex++;
                    visibleTopIndex++;
                    dirIndexIsSound=isSound( ((String)dirList.elementAt(dirIndex)) );
                }
                break;
            //Select——>选择音频文件,判断是否支持类型
            case -5://中心确定键
            case -6://Yes
                if(dirIndexIsSound) {
                    fileURL = "file://"+currentDir+(String)dirList.elementAt(dirIndex);
                    try{
                    	mainMenu.player.stop();
                    }catch(Exception e){}
                    mainMenu.loadCustomSound();
                    try{
                    	mainMenu.player.start();
                    }catch(Exception e){}
                    break;
                }
            //选中的是文件夹
                if(dirIndex-1<lastDirIndex)
                traverse();
                break;
            case -7://Back
            	if(currentDir.equals("/")) {
                this.stopped=true;
                mainMenu.isMusic=false;
                mainMenu.framework.setPosition(61,68+mainMenu.count5*40);
                Nikuman.disposeSplash();
            	}
            	else {
            	dirIndex=0;
                traverse();
            	}
                break;
            case -11://退出键
                this.stopped=true;
                mainMenu.isMusic=false;
                Nikuman.disposeSplash();
                break;
        }
    }
    
    // 更新目录
    public void updateDirList(Enumeration e, boolean isRoot) {
        if(e==null){
        	mainMenu.isMusic=false;
        	Nikuman.disposeSplash();
            }
        // 移出所有dirList内容
        dirList.removeAllElements();
        // 设置index数
        lastDirIndex=0;
        visibleTopIndex=0;
        visibleBottomIndex=visibleBottomIndex_START;
        dirIndex=0;
        // 如果不是根目录,画..
        if(!isRoot) {
            dirList.addElement("..");
            lastDirIndex++;
        }
        // 添加所有目录名称
        while (e.hasMoreElements()) {
            String s =(String)e.nextElement();
            if(s.endsWith("/"))
            {
                dirList.insertElementAt(s,lastDirIndex);
                lastDirIndex++;
            }
            else if(TYPE_SET_HOMEDIR!=0)
                dirList.addElement(s);
        }
        dirSize=dirList.size();
        dirIndexIsSound=false;
    }
    
    // 变换目录
    private void traverse() {
        String choosenDir = (String)dirList.elementAt(dirIndex);
        if (choosenDir.equals("..")) {
            int i = currentDir.lastIndexOf('/', currentDir.length()-2);
            if (i != -1)
                currentDir= currentDir.substring(0, i+1);
            else
                currentDir= "/";
        }
        else if(dirIndex<=lastDirIndex )
        {
            currentDir = currentDir+choosenDir;
        }
        new Thread(new Runnable() {
            public void run() {
                fileAction.getDirContent(currentDir);
            }
        }).start();
    }
    
    public void run() {
        while(!stopped) {
            repaint();
            try {
                Thread.sleep(10);
            } catch(Exception e){}
        }
    }
    
    // 判断是否是声音
    private boolean isSound(String im) {
        int length = im.length()-4;
        if(length<1)
            return false;
        
        String s = im.substring(length);
        if(s.equalsIgnoreCase(".mid"))
            return true;
        else if(s.equalsIgnoreCase(".mp3"))
            return true;
        else
            return false;
    }
    
    private void setProperties() {
        font_medium_Height= medium_Font.getHeight();
        font_small_Height= small_Font.getHeight();
        
        visibleTopIndex=0;
        visibleBottomIndex_START=(HEIGHT - 4* font_medium_Height)/font_small_Height;
        visibleBottomIndex=visibleBottomIndex_START;
        currentDir="/";
        
        try {
            folderImage = Image.createImage("/Image/folder.png");
            fileImage = Image.createImage("/Image/file.png");
            downArrowImage = Image.createImage("/Image/downArrow.png");
            upArrowImage = Image.createImage("/Image/upArrow.png");
            bg = Image.createImage("/Image/back.png");
        } catch(Exception e){}
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -