panel.java
来自「soure code for j2me browser」· Java 代码 · 共 832 行 · 第 1/2 页
JAVA
832 行
row = (Component)rows.elementAt(pointerPos); if(row.keyEvent(key)==true) { return true; } } int tmpPos; switch(key) { case Canvas.LEFT: if(!animateDown) { if(viewportHeight<internalHeight) { scrollCount=FireScreen.SCROLL_COUNT; animateUp=true; } } break; case Canvas.RIGHT: if(!animateUp) { if(viewportHeight<internalHeight) { scrollCount=FireScreen.SCROLL_COUNT; animateDown=true; } } break; case Canvas.UP: tmpPos = getNextTraversableComponent(pointerPos,false); if(tmpPos!=-1) { pointerPos=tmpPos; row = (Component)rows.elementAt(pointerPos); row.keyEvent(key); recalculateVecticalOffset(); repaint=true; } else { // the last selected component must remain selected, its more usable this way. ((Component)rows.elementAt(pointerPos)).setSelected(true); return keyEvent(Canvas.LEFT); // scroll up } break; case Canvas.DOWN: tmpPos = getNextTraversableComponent(pointerPos,true); if(tmpPos!=-1) { pointerPos=tmpPos; row = (Component)rows.elementAt(pointerPos); row.keyEvent(key); recalculateVecticalOffset(); repaint=true; } else { ((Component)rows.elementAt(pointerPos)).setSelected(true); return keyEvent(Canvas.RIGHT); // scroll down } break; case Canvas.GAME_A: if(commandListener!=null && leftCmd!=null) { if(control.isBusyMode() && cancelCmd!=null) // in busy mode, the cancel command is shown. { commandListener.commandAction(cancelCmd,this); repaint=true; } else if(leftPopup==null) { commandListener.commandAction(leftCmd,this); repaint=true; } else { control.showPopup(leftPopup); } } break; case Canvas.GAME_B: if(!control.isBusyMode() && commandListener!=null && rightCmd!=null) { if(rightPopup==null) { commandListener.commandAction(rightCmd,this); repaint=true; } else { control.showPopup(rightPopup); } } break; case Canvas.FIRE: break; } return repaint; } private void recalculateVecticalOffset() { int i,tmpHeight=0; for(i=0;i<=pointerPos;++i) { tmpHeight+=((Component)rows.elementAt(i)).getHeight(); } if(tmpHeight>viewportHeight) { int vo = tmpHeight-viewportHeight; int diff =(verticalOffset - vo); if(diff<0 || diff>viewportHeight) { verticalOffset = vo; } } else { verticalOffset=0; } scrollY =(viewportHeight*tmpHeight)/internalHeight ; } public void addCommand(Command c) { if(c.getCommandType()==Command.BACK) { leftCmd = c; leftPopup=null; } else if(c.getCommandType()==Command.CANCEL) { cancelCmd = c; leftPopup=null; } else { rightCmd = c; rightPopup=null; } } public void removeCommands() { leftCmd = null; leftPopup=null; rightCmd = null; rightPopup=null; } public void addCommand(Command popupCmd,Popup popup) { popup.setWidth(120); popup.setHeight(120); popup.validate(); if(popupCmd.getCommandType()==Command.BACK) {// System.out.println("Setting popup to left softkey");// System.out.println("Width/Height: "+getWidth()+"/"+getHeight()); leftCmd = popupCmd; leftPopup = popup; popup.setPosX(1); popup.setPosY(getHeight()-FireScreen.getBottomOffset()-popup.getHeight()); } else {// System.out.println("Setting popup to right softkey");// System.out.println("Width/Height: "+getWidth()+"/"+getHeight()); rightCmd = popupCmd; rightPopup=popup; popup.setPosX(getWidth()-FireScreen.SCROLLBAR_WIDTH-popup.getWidth()-1); popup.setPosY(getHeight()-FireScreen.getBottomOffset()-popup.getHeight()); } } public void setCommandListener(CommandListener l) { commandListener = l; } public String getLabel() { return labelStr; } public void setLabel(String label) { labelStr = label; // keep original string for later user (incase of a resize) int w = FireScreen.defaultLabelFont.stringWidth(label); int lw=10; if(FireScreen.defaultLogo!=null) { lw += FireScreen.defaultLogo.getWidth(); } int max = (getWidth()-lw); if(w<max) { this.label = label; return; } // trim label to an acceptable size. char[] lch = label.toCharArray(); max = max - FireScreen.defaultLabelFont.stringWidth("..."); StringBuffer res = new StringBuffer(); int sum = 0; for(int i =0;i<lch.length && sum<max;++i) { sum+=FireScreen.defaultLabelFont.charWidth(lch[i]); res.append(lch[i]); } this.label = res.toString()+"..."; } /** * Removes all components from this panel. Its does not remove the commands * */ public void removeAll() { animateDown=false; animateUp = false; pointerPos=0; verticalOffset=0; internalHeight=0; scrollY=0; rows = new Vector(); } /** * Kitame an kapoio apo ta components pou fenonte ston panel einai animated. * An einai kaloume tin clock() tou kathe enos animated component kai kanoume repaint * */ public boolean clock() { boolean repaint=false; if(ticker!=null) { ticker.clock(); repaint = true; } if(animateUp) { verticalOffset-=FireScreen.SCROLL_STEP; --scrollCount; if(verticalOffset<=0) { verticalOffset= 0; scrollCount=0; scrollY = control.getTopOffset(); } if(scrollCount<=0) { animateUp=false; } return true; } if(animateDown) { verticalOffset+=FireScreen.SCROLL_STEP; --scrollCount; if(verticalOffset>internalHeight-viewportHeight) { verticalOffset= internalHeight-viewportHeight; scrollCount=0; scrollY =getHeight() - FireScreen.getBottomOffset()-FireScreen.SCROLLBAR_HEIGHT; } if(scrollCount<=0) { animateDown=false; } return true; } Component row; int ypos=0; int i,htmp; int height = getHeight(); for(i =0 ;i<rows.size() && ypos<(verticalOffset+height);++i) { row = (Component)rows.elementAt(i); htmp = row.getHeight(); if(ypos+htmp>verticalOffset) { // arxizoume na zografizoume apo auto edo to row. if(row.isAnimated()){ row.clock();repaint=true;} } ypos +=htmp; } return repaint; } public void internalValidateEvent(Component c) { if(control!=null) { internalHeight-=c.getHeight(); c.setWidth(getWidth()-FireScreen.SCROLLBAR_WIDTH); c.validate(); internalHeight +=c.getHeight(); control.repaint(); } } public void setCurrent(Displayable d) { if(control!=null) { control.setCurrent(d); } } public void setContainerCurrent() { if(control!=null) { control.setContainerCurrent(); } } /** * * @see gr.bluevibe.fire.components.Component#validate() */ public void validate() { scrollY = FireScreen.getTopOffset(); animatedChildren=false; // validate all components int w = getWidth(); if(ticker!=null) { ticker.setWidth(w); ticker.validate(); } internalHeight=0; if(leftPopup!=null) { leftPopup.setPosX(1); leftPopup.setPosY(getHeight()-FireScreen.getBottomOffset()-leftPopup.getHeight()); } if(rightPopup!=null) { rightPopup.setPosX(getWidth()-FireScreen.SCROLLBAR_WIDTH-rightPopup.getWidth()-1); rightPopup.setPosY(getHeight()-FireScreen.getBottomOffset()-rightPopup.getHeight()); } int wtmp = w-FireScreen.SCROLLBAR_WIDTH; for(int i =0 ;i <rows.size();++i) { Component c = (Component)rows.elementAt(i); c.setWidth(wtmp); c.validate(); internalHeight +=c.getHeight(); if(c.isAnimated()) { animatedChildren=true; } } setLabel(labelStr); // recalculate label. } public boolean isAnimated() { if(ticker!=null || animatedChildren || animateDown || animateUp) { return true; } return false; } public void showAlert(String message,Image img) { alertText = new Row(img,message); // image on the left, text on the right of the alert. alertText.setAlignment(FireScreen.LEFT); alertText.setTextHpos(FireScreen.RIGHT); alertText.setTextVpos(FireScreen.CENTRE); alertText.setImageVpos(FireScreen.CENTRE); alertText.setImageHpos(FireScreen.LEFT); alertText.setBorder(true); alertText.setFilled(new Integer(control.getColor())); alertText.setColor(FireScreen.defaultTickerColor); alertText.setFont(FireScreen.defaultLabelFont); alertText.setWidth(getWidth()-FireScreen.SCROLLBAR_WIDTH-(2*FireScreen.ALERT_HORIZONTAL_OFFSET)); alertText.setMinHeight((2*FireScreen.ALERT_VERTICAL_OFFSET)); alertText.validate(); alertMode=true; control.repaint(); } public void resetPointer() { for(int i =0 ;i<rows.size();++i) { ((Component)rows.elementAt(i)).setSelected(false); } pointerPos = getNextTraversableComponent(-1,true); if(pointerPos>-1) { Component row = ((Component)rows.elementAt(pointerPos)); row.keyEvent(Canvas.DOWN); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?