📄 browsing.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 + -