📄 messagedialog.java
字号:
/********************************************************************
* 项目名称 :<b>j2me学习 J2me Wap Explorer</b> <br/>
*
* Copyright 2005-2006 Wuhua. All rights reserved </br>
*
* 本程序只用于学习目的,不能用于商业目的。如有需要请联系作者
********************************************************************/
package org.wuhua.wap.ui.form;
import java.util.Vector;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import org.wuhua.wap.log.Logger;
import org.wuhua.wap.ui.Command;
import org.wuhua.wap.ui.SelectedPart;
import org.wuhua.wap.ui.core.Platform;
import org.wuhua.wap.ui.event.CommandListener;
import org.wuhua.wap.util.FontUtil;
import org.wuhua.wap.util.StringUtil;
/**
* <b>类名:sdf.java</b> </br>
* 编写日期: 2006-12-25 <br/>
* 程序功能描述: <br/>
* Demo: <br/>
* Bug: <br/>
*
* 程序变更日期 :<br/>
* 变更作者 :<br/>
* 变更说明 :<br/>
*
* @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
*/
public class MessageDialog extends TextDialog implements CommandListener{
private static Logger logger = Logger.getLogger("MessageDialog");
private Command ok;
private SelectedPart plan;
private int planHeight;
private int contentHeight;
private int viewSize;
private int space;
private Vector content;
private int selectIndex;
private int contentY;
private String message;
public MessageDialog(String _title,String _message, Panel panel,Display display,long _timeOut) {
super(_title, panel, display, _timeOut);
ok = new Command("确定",Command.LEFT, Command.FIRST_PRIORITY);
this.addCommand(ok);
this.setSoftButtonListener(this);
this.setMessage(_message);
//initView();
this.setType(Dialog.DIALOG_OK);
}
public void setMessage(String message){
this.message = message;
skipMessage(message);
}
public void setCommandName(String name){
ok.setName(name);
}
private void skipMessage(String message) {
if(message == null)
return ;
content = new Vector();
String[] text = StringUtil.split(message, "\n");
for(int j =0; j < text.length; j++){
String[] t = FontUtil.splitOnlyStringToRowString(font,text[j],view[WIDTH]-6);
for(int i=0; i<t.length; i++){
content.addElement(t[i]);
}
///content.addElement("");
}
//log.debug(content.size());
//new Plan
}
protected void keyPressed(int keyCode) {
super.keyPressed(keyCode);
this.thisUpAndDown(keyCode);
this.repaint();
}
/**
* 上下事件
*
* @param keyCode
*/
private void thisUpAndDown(int keyCode) {
if (this.content == null)
return;
if(this.content.size() < this.viewSize)
return;
switch (keyCode) {
case Platform.KEY_UP: {
selectIndex = selectIndex <= 0 ? content.size() - viewSize - 1
: --selectIndex;
// log.debug("Key");
break;
}
case Platform.KEY_DOWN: {
selectIndex = selectIndex >=content.size() - viewSize - 1 ? 0
: ++selectIndex;
//log.debug("Key1");
break;
}
}
}
public void commandAction(Command cmd) {
if(cmd == ok)
this.cancel();
}
protected void paint(Graphics g) {
this.font = g.getFont();
parent.paint(g);
drawRGB(g);
this.softButton.paint(g);
this.paintMessageDialog(g);
}
/**
* 字体通过事件传播的机制,一层一层的传送下去
* @param g
*/
private void paintMessageDialog(Graphics g) {
this.font = g.getFont();
initView();
g.setColor(0xFFD84F); //
g.drawRect(view[X]-1,view[Y]-1,view[WIDTH]+1,view[HEIGHT]+1);
paintTitleImpl(g);
paintContent(g);
paintState(g);
}
private void paintTitleImpl(Graphics g) {
g.setColor(this.bgColor);
g.fillRect(view[X],view[Y],view[WIDTH],font.getHeight() + 2);
g.setColor(this.fontColor);
g.drawString(title, view[X] + 4, view[Y] + 1,Graphics.TOP|Graphics.LEFT);
}
private void paintContent(Graphics g) {
if(content.size() > viewSize ){
this.plan = new SelectedPart();
plan.setStyle(0x000000, 0x000000);
this.planHeight = contentHeight/(content.size() - viewSize);
}
contentY = view[Y] + font.getHeight() + 4;
g.setColor(0x001D68);
g.fillRect(view[X],contentY,view[WIDTH],contentHeight);
paintContentImpl(g);
}
public void setStyle(int bgColor, int fontColor){
this.bgColor = bgColor;
this.fontColor = fontColor;
this.softButton.setStyle(bgColor, fontColor);
}
private void paintContentImpl(Graphics g) {
if(content == null)
return ;
int size = viewSize>content.size()?content.size():viewSize + selectIndex;
g.setColor(0xFFFFFF);
for(int i = selectIndex; i<size; i++){
g.drawString((String) content.elementAt(i),view[X] + 2, contentY + space * (i-selectIndex), Graphics.TOP|Graphics.LEFT);
}
/**
* 绘制状态条
*/
if(plan != null){
//log.debug("SelectIndex = " + selectedIndex);
plan.changePosition(view[WIDTH] + 4 , contentY + this.planHeight *selectIndex, 4,this.planHeight);
plan.paint(g);
}
}
private void paintState(Graphics g) {
int height = Platform.HEIGHT - 30 - font.getHeight() - 2;
g.setColor(this.bgColor);
g.fillRect(view[X], height ,view[WIDTH],font.getHeight() + 2);
g.setColor(0xFFFFFF);
g.drawLine(view[X],height,view[WIDTH] + 10, height);
g.setColor(this.fontColor);
if(type == Dialog.DIALOG_OK){
g.drawString(ok.getName(),Platform.WIDTH /2, height + 2,Graphics.HCENTER|Graphics.TOP);
}else if(type == Dialog.DIALOG_OK_CANCEL){
g.setColor(0xFFFFFF);
g.fillRect(view[WIDTH]/2 + view[X] -2, height + 1, 2, font.getHeight() + 1 );
g.setColor(0xFFFFFF);
g.drawString("确定",view[WIDTH]/4 + view[X], height + 2,Graphics.HCENTER|Graphics.TOP);
g.drawString("取消",view[WIDTH]/4*3 + view[X], height + 2,Graphics.HCENTER|Graphics.TOP);
}
}
/**
* 初始话各个item的位置,以及可以绘制多少个item
*
*/
protected void initView() {
//发现大小改变的时候才重新初始化
if (view[HEIGHT] < Platform.HEIGHT - 20 - 5 - 4) {
/*font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_SMALL);*/
this.skipMessage(message);
space = font.getHeight();
view[X] = 10;
view[Y] = 29;
view[WIDTH] = Platform.WIDTH - 20;
view[HEIGHT] = Platform.HEIGHT - 20 - 10 - 29;
contentHeight = view[HEIGHT] - (font.getHeight() + 2) * 2;
viewSize = contentHeight / font.getHeight();
//log.debug("viewSize = " + viewSize);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -