listmidlet.java.svn-base

来自「example2 众多JAVA实例源码...学习java基础的好帮手」· SVN-BASE 代码 · 共 176 行

SVN-BASE
176
字号
package opusmicro.demos.scalllist;

import java.util.Vector;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.Font;

public class ListMIDlet extends MIDlet{
	public ListMIDlet(){
		
	}
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
	}
	protected void pauseApp() {
	}
	protected void startApp() throws MIDletStateChangeException {
		ListCanvas lc = new ListCanvas();
		MyItem lt;
		for(int i=0;i<16;i++){
			lt = new MyItem("item "+i);
			lc.addChild(lt);
		}
		Display.getDisplay(this).setCurrent(lc);		
	}
}

interface ListItem{
//	void paint(Graphics g, int x, int y, int  width,int height, boolean focus);
}

class MyItem implements ListItem{
	public int itemHeight = 26;
	String text;
	int x,y;
	public MyItem(String text){
		this.text = text;
	}
	public void paint(Graphics g,int x,int y, int width, int height, boolean focus) {
		this.y = y;
		if(focus){
			g.setColor(0xff27);
		}else{
			g.setColor(0xff);
		}
		g.fillRect(x, y, width, height);
		System.out.println("frank: text = " + text);
		if(text!=null){
			g.setColor(0xffabcd);
			g.drawString(text, x+1, y + ( (height + Font.getDefaultFont().getHeight()) /2)	, Graphics.LEFT | Graphics.BOTTOM);
		}
	}
}

class ListCanvas extends Canvas {

	Vector children = new Vector();
	private int position = 0;
	private boolean positionChanged = false;
	private int startY = 0;
	private int windowStart = 0;
	private int widgetHeight = getHeight();
	private int widgetWidth = getWidth();
	private int startX = 0;
	private int padding = 0;
	private int scrollbarWidth = 6;
	MyItem item;
	public ListCanvas() {

	}
	public void addChild(MyItem item) {
		children.addElement(item);
	}

	public void previous() {
		if ( position > 0) {
			position--;
			positionChanged = true;
		}
		repaint();
		serviceRepaints();
	}

	public void next() {
		if ( position < children.size() - 1) {
			position++;
			positionChanged = true;
		}
		repaint();
		serviceRepaints();
	}

	public void keyPressed(int keyCode) {
		int action = getGameAction(keyCode);
		switch ( action) {
			case Canvas.UP:
				previous();
				break;
			case Canvas.DOWN:
				next();
				break;
		}
	}

	public void keyRepeated(int keyCode) {
		keyPressed(keyCode);
	}

	 public void determineWindowStart(){
		if ( positionChanged) {
			positionChanged = false;
			int positionEndY;
			int postitionStartY = startY;
			for ( int i = windowStart, stop = children.size() ; i < position && i < stop ; i++) {
				postitionStartY += ((MyItem) children.elementAt(i)).itemHeight;
			}
			positionEndY = postitionStartY + ((MyItem) children.elementAt(position)).itemHeight;
			if ( postitionStartY <= startY) {
				// move up
				windowStart = position;
			}
			else if ( positionEndY > (startY + widgetHeight)) {
				// move down
				for ( int i = windowStart, stop = children.size() ; positionEndY > (startY + widgetHeight)
						&& i <= position && i < stop ; i++) {
					windowStart++;
					positionEndY -= ((MyItem) children.elementAt(i)).itemHeight;
				}
			}
		}
	}
	protected void paint(Graphics g) {
		g.setColor(0xffff);
		g.fillRect(0, 0, widgetWidth, widgetHeight);
		int y =0, x = 0;
		boolean hasFocus = true;
		startY = y;
		startX = x;
		int[] clip = { g.getClipX(), g.getClipY(), g.getClipWidth(), g.getClipHeight() };
		g.setClip(x, y, widgetWidth, widgetHeight);
		if ( !children.isEmpty()) {
			int count = children.size();
			g.setColor(0x1a);
			//g.fillRect(x,y,widgetWidth,widgetHeight);
			determineWindowStart();
System.out.println("windowstart "+windowStart);
//			y += padding;
			for ( int i = windowStart ; i < count && y < (startY + widgetHeight - padding - padding) ; i++) {
				item = (MyItem) children.elementAt(i);
				item.paint(g, x + padding, y, widgetWidth - scrollbarWidth - padding - 1, startY
						+ 24, hasFocus && (position == i));
				y += item.itemHeight;
//				g.setColor(0xffaa);
//				g.fillRect(x+padding, y-1, getWidth()-padding-scrollbarWidth, 1);
//				if ( i<=3) {
//System.out.println("i "+i + " txt=" + item.text);	
//System.out.println("position "+position);	
//System.out.println("positiony "+i+" "+item.y + " :  " + x + padding + "," + y + "," + (widgetWidth - scrollbarWidth - padding - 1) + "," + (startY+ 24));
//System.out.println("title "+((MyItem) children.elementAt(0)).text);
//				}
			}
//System.out.println("y "+y);			
			if ( windowStart > 0 || y > ((startY + widgetHeight - padding - padding))) {
				double sliceHeight = (((double) widgetHeight) / count);
				int sliceY = (int) Math.floor((position * sliceHeight) + .5) + startY + 1;

				g.setColor(0xC8D8f);
				g.fillRect(x + widgetWidth - scrollbarWidth, sliceY, scrollbarWidth - 1, (int) Math.floor(.5 + sliceHeight));
			}
		}
		g.setClip(clip[0], clip[1], clip[2], clip[3]); //finally
	}
}

⌨️ 快捷键说明

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