⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inlist.java

📁 J2ME上的一个播放器,可以更换皮肤.开源软件.
💻 JAVA
字号:
package inline.ui.ce;

import inline.ui.*;
import java.util.*;
import javax.microedition.lcdui.*;
import inline.ui.le.ListElement;


    public class InList extends CanvasElement 
    {
        private static final int SPEED_STEPS = 4;
        private static final int SCROLLER_WIDTH = 2;
        private Vector vct;
	private Hashtable accelerators;

	private boolean fastscroll;
        private int vctsel = 0;
        private int intsta = 0;
        private int intend = 0;

	private static final int TTT_LIST_INACTIVITY = 0x6F41EF07;
	private Timer inactititytimer;

        public InList(HostCanvas prnt, int x, int y, int w, int h)
        {
            super(prnt, x,y,w,h);
            vct = new Vector();
	    accelerators = new Hashtable();
	    fastscroll = true;
        }
        
        public InList(HostCanvas prnt)
        {
            this(prnt, 0,0,0,0);
        }
        
	public final boolean canFocus()
        {
            return true;
        }
	
	public final void assignNumberAccelerators()
	{
	    if (vct.size()>0 && vct.size()<9)
	    {
		for(int i =0;i<vct.size();i++)
		{
		    ListElement ev = (ListElement)vct.elementAt(i);
		    if (ev != null)
		    {
			accelerators.put(new Integer('1'+i), ev);
		    }
		}
	    }
	}

        public void setLines(Vector evct)
        {
            vct = evct;
            vctsel = 0;
            intsta = 0;
	    
	    for(int i =0;i<vct.size();i++)
	    {
		ListElement ev = (ListElement)vct.elementAt(i);
		int ac = ev.getAccelerator();
		if (ac != 0)
		{
		    accelerators.put(new Integer(ac), ev);
		}
	    }
	    
	    intend = getVisibleRows()-1;
        }
        
        public Vector getLines()
        {
            return vct;
        }

	public int getSelectedIndex()
        {
            return vctsel;
        }

        public String getSelectedText()
        {
	    ListElement ev = (ListElement)vct.elementAt(vctsel);
            return ev.getString();
        }

	public void setSelectedIndex(int idx)
        {
	    if (vct.size()==0) return;
	    if (idx>=vct.size()) idx = vct.size()-1;
	    int ovs = vctsel;
	    
	    while(idx!=vctsel)
	    {
		if (idx>vctsel)
		{
                    SelectionDown();
		}
		else
		{
                    SelectionUp();
		}
	    }
	    
	    if (ovs != vctsel) clearAutoScrollCounter();
	}
	
	public void moveSelectionDown()
	{
	    SelectionDown();
	}

	public ListElement getSelectedElement()
	{
	    if (vct.size()==0) return null;
	    return (ListElement)vct.elementAt(vctsel);
	}
	
	public void setFastScroll(boolean ffastscroll)
	{
	    fastscroll = ffastscroll;
	}

	private int getLimit()
	{
	    int lim = getHeight() / fnthei;
            if (lim>=vct.size()) 
            {
		lim = vct.size();
	    }
	    return lim;
	}

	private int getVisibleRows()
	{
	    int vis = 0;
	    for(int i=0;i<getLimit();i++)
	    {
		ListElement ev = (ListElement)vct.elementAt(intsta+i);

		vis += ev.getRowsCount();
	    }
	    return vis;
	}
	
        public void paintElement(Graphics g) 
        { 
            synchronized (g) 
            {
                int bgcolor = getBackgroundColor();
                int fgcolor = getForegroundColor();

		int lim = getLimit();
		
		{
		    int scy = 0;
		    int sch;

		    int vis = 0;
		    for(int i=0;i<lim;i++)
		    {
			ListElement ev = (ListElement)vct.elementAt(intsta+i);

			vis += ev.getRowsCount();
			intend = intsta+i+(ev.getRowsCount()-1);
		    }
  
		    if (vct.size()==0)
		    {
			sch = getHeight();
		    }
		    else
		    {
			sch = getHeight()*vis/vct.size();
		    }
		    
		    if (vct.size()>1)
		    {
			scy = vctsel*(getHeight()-sch)/(vct.size()-1);
		    }
		    
		    if (sch<g.getClipHeight())
		    {
			g.setColor(fgcolor);
			g.fillRect(getWidth()-SCROLLER_WIDTH, scy, SCROLLER_WIDTH, sch);
			g.setClip(g.getClipX(),g.getClipY(), g.getClipWidth()-SCROLLER_WIDTH-1, g.getClipHeight());
		    }
		}

                
                for(int i=0;i<lim;i++)
                {
                    ListElement ev = (ListElement)vct.elementAt(intsta+i);

		    int asc = -1;
		    
                    if (vctsel == intsta+i)
                    {
                        g.setColor(fgcolor);
                        g.fillRect(0, i*fnthei, getWidth(), ev.getRowsCount()*fnthei);
                        
                        g.setColor(bgcolor);
			
			asc = getAutoScrollCounter();
                    }
                    else
                    {
                        g.setColor(fgcolor);
                    }

		    if (ev.ownerDraw())
		    {
			ev.onDraw(g, this, 0, i*fnthei, asc);
		    }
		    else
		    {
			paintStringASC(this, g,ev.getString(),1,i*fnthei,0, 1, asc);
		    }
                   
		    i = i+(ev.getRowsCount()-1);
                    intend = intsta+i;
                }
            }
        }

        public void keyPressedElement(int keyCode)
        {
            boolean paint = false;

	    if (inactititytimer != null)
	    {
		startInactivityTimer();
	    }
            
	    if (vct.size()==0)
	    {
		return;
	    }
	    
	    if (keyCode == UP)
            {
		SelectionUp();
                wantRepaint();
                wantKeyRepeat();
            }
            if (keyCode == DOWN)
            {
		SelectionDown();
                wantRepaint();
                wantKeyRepeat();
            }
            if (keyCode == LEFT && fastscroll)
            {
                for(int i=0;i<SPEED_STEPS;i++)
                {
                    SelectionUp();
                }
                wantRepaint();
                wantKeyRepeat();
            }
            if (keyCode == RIGHT && fastscroll)
            {
                for(int i=0;i<SPEED_STEPS;i++)
                {
                    SelectionDown();
                }
                wantRepaint();
                wantKeyRepeat();
            }

	    Object accobj = accelerators.get(new Integer(keyCode));
	    ListElement le;
	    if (accobj != null)
	    {
	        le = (ListElement)accobj;
	    }
	    else
	    {
	        le = (ListElement)vct.elementAt(vctsel);
	    }
	    
            if ((keyCode == CENTER) || (accobj != null))
            {
                boolean repaint = le.onSelect();
		parent.selectPreview(le);
		if (repaint)
		{
                    wantRepaint();
		}
            }
	    
	    if (le!=null && le.deliverKeys())
	    {
                if (le.keyPressedElement(keyCode, this))
		{
                    wantRepaint();
		};
	    }
        }
        
        private final void SelectionUp()
        {
            if (vct.size()==0) return;
            
            if (vctsel>0)
            {
                vctsel--;
                if (vctsel<intsta)
                {
                    intsta--;
                }
            }
            else
            {
                vctsel = vct.size()-1;
                int haverows = getHeight()/fnthei;
                int sum = 0;
                intsta = vctsel;
                while((sum<haverows) && (intsta>=0))
                {
                    sum+=((ListElement)vct.elementAt(intsta)).getRowsCount();
                    intsta--;
                }
                intsta++;
            }
        }

        private final void SelectionDown()
        {
            if (vct.size()==0) return;

            if (vctsel<vct.size()-1)
            {
                vctsel++;
                if (vctsel>intend)
                {
                    intsta++;
                }
            }
            else
            {
                vctsel = 0;
                intsta = 0;
            }
        }

	protected int getContentWidthImpl()
	{
	    int maxw = 0;

	    if (vct!=null)
	    {
		for(int i=0;i<vct.size();i++)
		{
		    ListElement le = (ListElement)vct.elementAt(i);
		    int letw = selectedFont.stringWidth(le.getString());
		    if (maxw<letw) maxw=letw;
		}
	    }
	
	    maxw += 4; // scroller
	    
	    return maxw;
	}

	protected int getContentHeightImpl()
	{
	    int maxh = 0;
	    
	    if (vct!=null)
	    {
		maxh = vct.size()*selectedFont.getHeight();
	    }
	    
	    return maxh;
	}

	public void OnSizeChanged()
	{
	    int presel = vctsel;
            vctsel = 0;
            intsta = 0;

	    intend = getVisibleRows()-1;

	    setSelectedIndex(presel);
	}
	
	public void startInactivityTimer()
	{  
	    clearInactivityTimer();
	
	    inactititytimer = getParent().newSingleShotTimer(inactititytimer, 
					   TTT_LIST_INACTIVITY,
					   20000, // 20 sec
					   this);
	}
    
	private void clearInactivityTimer()   
	{
	    inactititytimer = getParent().killTimer(inactititytimer);
	}
	
	public void onTimer(int tag, long delta)
	{
	    super.onTimer(tag, delta);
	    if (tag == TTT_LIST_INACTIVITY)
	    {
		parent.selectPreview(this);
	    }
	}
    
    }

⌨️ 快捷键说明

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