📄 wappage.java
字号:
/********************************************************************
* 项目名称 :<b>j2me学习 J2me Wap Explorer</b> <br/>
*
* Copyright 2005-2006 Wuhua. All rights reserved </br>
*
* 本程序只用于学习目的,不能用于商业目的。如有需要请联系作者
********************************************************************/
package org.wuhua.wap.ui;
import java.util.Vector;
import javax.microedition.lcdui.Graphics;
import org.wuhua.wap.log.Logger;
import org.wuhua.wap.ui.core.Platform;
/**
* <b>类名:WAPPart.java</b> </br>
* 编写日期: 2006-12-23 <br/>
* 程序功能描述:WapPage UI. <br/>
*
* Demo: <br/>
* Bug: <br/>
*
* 程序变更日期 :<br/>
* 变更作者 :<br/>
* 变更说明 :<br/>
*
* @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
*/
public class WapPage extends Part {
private static Logger logger = Logger.getLogger("WapPage");
protected Vector parts;
protected int numOfEls;
protected int paintSize = 10;
protected int startIndex = 0;
/**
* 竖状态
*/
private SelectedPart scroll;
/**
* 状态条的提示
*/
private SelectedPart plan;
private Part currentPart;
/**
* 当前part的行号
*
*/
private int currentRow;
public WapPage() {
super(0, 20, Platform.WIDTH, Platform.HEIGHT -20);
createScroll();
}
private void createScroll() {
scroll = new SelectedPart();
scroll.setStyle(0x636364, 0x4C63EF);
scroll.setHasFocus(true);
scroll.changePosition(Platform.WIDTH - 6, 20, 4, Platform.HEIGHT - 42);
plan = new SelectedPart();
plan.setStyle(0xFFFFFF, 0x000000);
plan.setHasFocus(true);
plan.changePosition(Platform.WIDTH - 5, 21, 3, Platform.HEIGHT - 143);
}
public void appendParts(Vector parts){
this.parts = parts;
this.numOfEls = parts.size();
}
public void addItemPart(Part part){
if(parts == null)
parts = new Vector();
parts.addElement(part);
this.numOfEls = parts.size();
}
public void onClick(int keyCode) {
upAndDownAction(keyCode);
//if (keyCode == Platform.KEY_ENTER) {
enterAction(keyCode);
//}
}
private void enterAction(int keyCode) {
//logger .debug(partChangeListener);
currentPart.onClick(keyCode);
}
/**
* 左列上下动作
* @param keyCode
*/
private void upAndDownAction(int keyCode) {
if(this.numOfEls == 0)
return;
switch (keyCode) {
case Platform.KEY_UP: {
selectedIndex--;
redoHasFocus();
break;
}
case Platform.KEY_DOWN: {
selectedIndex++;
undoHasFocus();
break;
}
}
changeSelectIndex();
setHasFocus();
}
/** 改变焦点,使用户看起来,他选择的是这个Item
* 设置这个Item的焦点为true,保存他的选择条* */
private void setHasFocus() {
currentPart = (Part) parts.elementAt(selectedIndex+startIndex);
currentPart.hasFocus = true;
//log.debug("ID=" + selectedIndex);
//log.debug("selectPosition = " + item.getStartY());
}
/** 改变焦点,使用户看起来,他选择的是这个Item
* 此操作是用户向下时候所需要的操作* */
private void undoHasFocus() {
Part part = (Part) parts.elementAt(selectedIndex+this.startIndex-1);
part.hasFocus = false;
//log.debug("selectPosition = " + item.getStartY());
}
/** 改变焦点,使用户看起来,他选择的是这个Item ,此方法是用户按向上的按钮时候所要做的工作* */
private void redoHasFocus() {
Part part = (Part)parts.elementAt(selectedIndex+startIndex+1);
part.hasFocus = false;
}
private void changeSelectIndex() {
int num = (this.paintSize < numOfEls)?paintSize:numOfEls;//取可显示的菜单项数目
if (selectedIndex>num-1)
{
startIndex++;
selectedIndex=(byte)(num-1);
}
if (selectedIndex < 0)
{
if (startIndex>0)
{
selectedIndex =0;
startIndex--;
}
else
{
startIndex = numOfEls-num;
selectedIndex=num-1;
}
}
if (startIndex+ selectedIndex > numOfEls -1)
{
startIndex= 0;
selectedIndex = 0;
}
}
public void paint(Graphics g) {
paintHypers(g);
}
private void paintHypers(Graphics g) {
int height = 22;
for(int i =0; i < this.numOfEls; i++){
height = paintPartImpl(g, height, i);
}
}
/**
* 具体绘制.绘制是通过判断此控件是否是下一行,如果是则换行,否则不
*/
private int paintPartImpl(Graphics g, int height, int i) {
Part part = (Part) parts.elementAt(i);
part.setPartChangeListener(partChangeListener);
if(part.isNextRow()){
part.changePosition(0, height , 0, 0);
height = height + part.getHeight();
}else{
Part back = (Part) parts.elementAt(i-1);
part.changePosition(back.getWidth(), back.getView()[Y] , 0, 0);
//logger.debug(back.getWidth());
//logger.debug(back.getView()[Y]);
}
part.paint(g);
return height;
}
public int getHeight() {
return 0;
}
public int getWidth() {
return font.stringWidth(text);
}
public Part getPart(){
return this.currentPart;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -