您的位置:首页 > 其它

J2ME从零开始(学习笔记9)

2009-09-24 21:32 162 查看
5 Gauge
在高级图像用户界面中,有时侯会用到进度条之类的显示,或者调解音量大小的显示,使用Gauge便可以实现这个功能。
Gauge的构造方法:Gauge(String label, Boolean interactive, int maxValue, int initialValue)
第二个参数interactive表示的含义是看该控件是否可以交互,如果为true表示可以;maxValue为Gauge的最大值,initialValue是Gauge的初始值。
package J2ME001;

import java.util.Timer;
import java.util.TimerTask;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class GaugeMIDlet extends MIDlet implements CommandListener{
private Form form;
private Gauge gauge1;
private Gauge gauge2;
private Timer timer;
private MyTask myTask;
private Command cmdExit=new Command("Exit",Command.EXIT,1);
public GaugeMIDlet(){
gauge1=new Gauge("不可交互Gauge",false,5,0);
gauge2=new Gauge("可交Gauge",true,5,0);
form =new Form("Gauge显示");
form.setCommandListener(this);
form.append(gauge1);
form.append(gauge2);
form.addCommand(cmdExit);
timer=new Timer();
myTask=new MyTask();
timer.scheduleAtFixedRate(myTask, 2000, 5000);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

protected void pauseApp() {

}

protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(form);
}

public void commandAction(Command cmd, Displayable dis) {
if(cmd.equals(cmdExit)){
notifyDestroyed();
try {
destroyApp(false);
} catch (MIDletStateChangeException e) {
e.printStackTrace();
}
}
}
class MyTask extends TimerTask{

public void run() {
if(gauge1.getValue()+1 > gauge1.getMaxValue()){
timer.cancel();//terminates this timer
}else{
gauge1.setValue(gauge1.getValue()+1);
}
}

}

}


这里用到了Timer和TimerTask这两个类。Timer是个定时器,主要是用来启动TimerTask,即任务器,而TimerTask主要作用是启动线程,让应用程序中的相关变量在线程中得到控制。TimerTask是个抽象类不能被直接实例化因此这里用到了MyTask这个类来继承TimerTask。

6 TextField
TextField与TextBox及其相似,只不过前者相对于属于小型文本编辑框,而且是继承自Item,它不可以独立显示在界面上,需要通过Form来添加,而TextBox是可以独立显示的。
TextField的构造方法TextField(String label, String text, int maxSize, int constrains )

package J2ME001;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class TextFieldMIDlet extends MIDlet implements CommandListener{

private Form form;
private Command exitCommand=new Command("Exit",Command.EXIT,1);
public TextFieldMIDlet(){
form=new Form("TextField显示");
form.setCommandListener(this);
form.addCommand(exitCommand);
TextField text=new TextField("任何字符","",50,TextField.ANY);
form.append(text);
text=new TextField("E-Mail地址","",50,TextField.EMAILADDR);
form.append(text);
text=new TextField("整数值","",50,TextField.NUMERIC);
form.append(text);
text=new TextField("电话号码","",50,TextField.PHONENUMBER);
form.append(text);
text=new TextField("URL网址","",50,TextField.URL);
form.append(text);
text=new TextField("数值小数","",50,TextField.DECIMAL);
form.append(text);
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

protected void pauseApp() {

}

protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(form);
}
public void commandAction(Command cmd, Displayable dis) {
notifyDestroyed();
try {
destroyApp(true);
} catch (MIDletStateChangeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


7 ChoiceGroup
ChoiceGroup是选项组,继承了Item又实现了Choice接口,与List用法相似。区别是ChoiceGroup是显示在Form内的选项组,而List是单独显示控件。还有一点ChoiceGroup不支持Choice.IMPLICIT,而支持Choice.POPUP,而List支持前者不支持后者。

package J2ME001;

import javax.microedition.lcdui.CustomItem;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class CustomItemMIDlet extends MIDlet {
private Form form;
public CustomItemMIDlet() {
MyCustomItem myCustomItem=new MyCustomItem("表格");
form=new Form("学生信息");
form.append(myCustomItem);
}

protected void destroyApp(boolean unconditional)
throws MIDletStateChangeException {

}

protected void pauseApp() {

}

protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(form);
}
class MyCustomItem extends CustomItem{
public MyCustomItem(String label){
super(label);
}
protected int getMinContentHeight(){
return 0;
}
protected int getMinContentWidth() {
return 0;
}
protected int getPrefContentHeight(int width) {
return 120;
}
protected int getPrefContentWidth(int height) {
return 221;
}
protected void paint(Graphics g, int w, int h) {
g.setClip(0, 0, w, h);
g.setColor(200);
for(int i=0;i<4;i++){
g.drawLine(0, i*30, 220, i*30);
}
for(int i=0;i<5;i++){
g.drawLine(i*55, 0, i*55, 90);
}
String[] info={"姓名:","李三三","年龄:","13",
"性别:","女","班级:","初二(2)班",
"民族:","汉","学号:","1898993"};
for(int i=0;i<12;i++){
g.drawString(info[i], 5+(i%4)*55, 2+(i/4)*30, 0x4|0x10);
}
}
}
}

6 Alert 控件
Alert在高级图形用户界面中用来提示消息作用,如同一般应用程序中的消息提示框。Alert可以通过AlertType来向用户显示图标或者声音,让用户感触更深。
AlertType.ALARM 响铃提示
AlertType.CONFIRMATION 确认提示
AlertType.ERROR 错误提示
AlertType.INFO 信息提示
AlertType.WARNING 警告提示
此外Alert控件可以和Gauge控件结合使用来提示信息,但需遵循以下原则:
1 不可交互模式
2 不属于其他任何一个容器(如其他Alert或Form)
3 不能有任何命令
4 不可以设置ItemCommanListener
5 标签须为null
6 getPreferredWidth() 和 getPreferredHeight() 返回值都为-1
7 布局必需为LAYOUT_DEFAULT

package J2ME001;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Gauge;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class AlertMIDlet extends MIDlet implements Runnable {
private Gauge gauge;
private Alert alert;
private long firstTime = 0L;

public AlertMIDlet() {
alert = new Alert("Alert Message", null, null, AlertType.WARNING);
gauge = new Gauge(null, false, 5, 1);
alert.setIndicator(gauge);
alert.setTimeout(10000);
firstTime = System.currentTimeMillis();
new Thread(this).start();
}

protected void destroyApp(boolean unconditional)
throws MIDletStateChangeException {

}

protected void pauseApp() {

}

protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(alert);
}

public void run() {
while(true){
int time=(int)(System.currentTimeMillis()-firstTime);
gauge.setValue(time/1000);
if(time>=alert.getTimeout()/2){
alert.setString("欢迎使用Alert信息提示!");
alert.setIndicator(null);
break;
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: