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

📄 panel.java

📁 最强手机阅读器Anyview3.0版的界面代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
				int n = currentPointer - 1;
				Component c = (Component) hotpots.get(n);
				if (!componentInScreen(c) || c.getTop() < getTop() + verticalOffset + getTopHeight()) { //不在当前屏幕内,不管
					verticalOffset -= getFont().getHeight() + Component.HORPADDING;
					verticalOffset = verticalOffset < 0 ? 0 : verticalOffset;
					findPointerInCurrentScreen(false);
				} else {
					((Component) hotpots.get(currentPointer)).setSelected(false);
					c.setSelected(true);
					currentPointer = n;
					if (showscrollbar && verticalOffset > c.getTop()) {
						verticalOffset = c.getTop();
					}
				}
				return true;
			}
		} else if (key == Settings.VKEY_DOWN || key == Settings.VKEY_NUM8) { //下
			if (currentPointer > hotpots.size() - 2) { //整个panel根本就没有热点
				//分两种情况判断
				if (hotpots.size() == 0 || !recycle) { //
					if (showscrollbar) {
						verticalOffset += getFont().getHeight() + Component.HORPADDING;
						verticalOffset = verticalOffset > internalHeight - viewportHeight ? internalHeight
								- viewportHeight : verticalOffset;
					}
				} else {
					int n = 0;
					Component c = (Component) hotpots.get(n);
					((Component) hotpots.get(currentPointer)).setSelected(false);
					c.setSelected(true);
					currentPointer = n;
					verticalOffset = 0;
					//					if (showscrollbar) {
					//						verticalOffset = c.getTop();
					//						if (internalHeight - c.getTop() < viewportHeight) {
					//							verticalOffset = internalHeight - viewportHeight;
					//						}
					//					} else {
					//						verticalOffset = 0;
					//					}
				}
				return true;
			} else {
				int n = currentPointer + 1;
				Component c = (Component) hotpots.get(n);
				if (!componentInScreen(c)) { //不在当前屏幕内,不管
					verticalOffset += getFont().getHeight() + Component.HORPADDING;
					verticalOffset = verticalOffset > internalHeight - viewportHeight ? internalHeight - viewportHeight
							: verticalOffset;
					findPointerInCurrentScreen(true);

				} else {
					((Component) hotpots.get(currentPointer)).setSelected(false);
					c.setSelected(true);
					currentPointer = n;
				}
				return true;
			}
		} else if (key == Settings.VKEY_FIRE || key == Settings.VKEY_NUM5) {
			if (currentPointer == -1) {
				return false;
			}
			Component c = (Component) hotpots.get(currentPointer);
			return generateEvent(c);
		} else if (key == Settings.VKEY_LEFT || key == Settings.VKEY_NUM4) {
			if (animateDir == Settings.ANIMATE_NONE) {
				if (viewportHeight < internalHeight) {
					scrollCount = Settings.SCROLL_COUNT;
					animateDir = Settings.ANIMATE_UP;
				}
			}
		} else if (key == Settings.VKEY_RIGHT || key == Settings.VKEY_NUM6) {
			//System.out.println("here......");
			if (animateDir == Settings.ANIMATE_NONE) {
				if (viewportHeight < internalHeight) {
					scrollCount = Settings.SCROLL_COUNT;
					animateDir = Settings.ANIMATE_DOWN;
				}
			}
		} else if (key == Settings.VKEY_LSOFT || key == Settings.VKEY_STAR) {
			if (getCommandListener() != null && leftCmd != null) {
				if (null == leftPopup) {
					getCommandListener().commandAction(leftCmd, null);
					repaint = true;
				} else {
					mainCanvas.showPopup(leftPopup, Settings.ANIMATE_UP);
				}
			}
		} else if (key == Settings.VKEY_RSOFT || key == Settings.VKEY_POUND) {
			if (getCommandListener() != null && rightCmd != null) {
				if (null == rightPopup) {
					getCommandListener().commandAction(rightCmd, null);
					repaint = true;
				} else {
					mainCanvas.showPopup(rightPopup, Settings.ANIMATE_UP);
				}
			}
		} else if (key == Settings.VKEY_RETURN) {
			return vkeyReturn();
		} else if (key == Settings.VKEY_DELETE) {
			return vkeyDelete();
		}
		return repaint;
	}

	public boolean vkeyReturn() {
		return false;
	}

	public boolean vkeyDelete() {
		return false;
	}

	/**
	 * 执行快捷键
	 */
	private boolean executeShortCut(int key) {
		for (int i = 0; i < hotpots.size(); i++) {
			Component c = (Component) hotpots.get(i);
			if (c.getShortCut() == key) {
				generateEvent(c);
				return true;
			}
		}
		return false;
	}

	private boolean generateEvent(Component c) {
		c.setCommandListener(this);
		if (c instanceof InputBlock) {
			setCurrent(new RowTextBox((InputBlock) hotpots.get(currentPointer), this));
			return false;
		} else if (c instanceof DropList) {
			new DropPanel((DropList) c, verticalOffset).show();
			return false;
		} else if (c instanceof SpinButton) {
			return c.keyReleased(Settings.VKEY_FIRE);
		} else {
			return c.generateEvent();
		}
	}

	/**
	 * DisplayableBlock是否在当前屏幕
	 * @param cmp
	 * @param top
	 * @return
	 */
	private boolean componentInScreen(Component cmp) {
		return (cmp.getTop() + cmp.getHeight() > getTop() + getTopHeight() + verticalOffset && cmp.getTop() < getTop()
				+ verticalOffset + getHeight() - getBottomHeight());
	}

	public void addCommand(Command c) {
		if (c.getCommandType() != Command.EXIT) {
			leftCmd = c;
			leftPopup = null;
		} else {
			rightCmd = c;
			rightPopup = null;
			rightString = c.getLabel();
		}
	}

	public void removeCommands() {
		leftCmd = null;
		rightCmd = null;
	}

	public void addCommand(Command popupCmd, PopMenu menu) {
		if (popupCmd.getCommandType() != Command.EXIT) {
			leftCmd = popupCmd;
			leftPopup = menu;
			leftPopup.validate();
			if (PopMenu.alignLeft) {
				leftPopup.setLocation(1, mainCanvas.getHeight() - leftPopup.getHeight() - getBottomHeight());
			} else {
				leftPopup.setLocation(getWidth() - 1 - leftPopup.getWidth(), mainCanvas.getHeight()
						- leftPopup.getHeight() - getBottomHeight());
			}
		} else {
			rightCmd = popupCmd;
			rightPopup = menu;
			rightPopup.validate();
			if (PopMenu.alignLeft) {
				rightPopup.setLocation(getWidth() - 1 - rightPopup.getWidth(), mainCanvas.getHeight()
						- rightPopup.getHeight() - getBottomHeight());
			} else {
				rightPopup.setLocation(1, mainCanvas.getHeight() - rightPopup.getHeight() - getBottomHeight());
			}
		}
	}

	/**
	 * Removes all components from this panel. Its does not remove the commands
	 *
	 */
	public void removeAll() {
		animateDir = Settings.ANIMATE_NONE;
		currentPointer = -1;
		verticalOffset = 0;
		internalHeight = 0;
		components = new ArrayList();
		hotpots = new ArrayList();
	}

	public boolean clock() {
		boolean repaint = false;
		int scroll = Settings.SCROLL_STEP;
		if (!Configure.enableAnimate) {
			scroll *= Settings.SCROLL_COUNT;
			scrollCount = 1;
			//			System.out.println("scroll = " + scroll);
		}
		if (animateDir == Settings.ANIMATE_UP) {
			verticalOffset -= scroll;
			--scrollCount;
			if (verticalOffset <= 0) {
				verticalOffset = 0;
				scrollCount = 0;
			}
			if (scrollCount <= 0) {
				animateDir = Settings.ANIMATE_NONE;
				findPointerInCurrentScreen(false);
			}
			return true;
		}
		if (animateDir == Settings.ANIMATE_DOWN) {
			verticalOffset += scroll;
			--scrollCount;
			if (verticalOffset > internalHeight - viewportHeight) {
				verticalOffset = internalHeight - viewportHeight;
				scrollCount = 0;
			}
			if (scrollCount <= 0) {
				animateDir = Settings.ANIMATE_NONE;
				findPointerInCurrentScreen(true);
			}
			return true;
		}

		if (pointerPressed && !pointerInscrollbar) {
			if (null != pressedComponent) {
				pointerPressedtime = System.currentTimeMillis();
				return keyRepeated(Settings.VKEY_FIRE);
			}
			//System.out.println(System.currentTimeMillis() - pointerPressedtime);
			if (System.currentTimeMillis() - pointerPressedtime > 2000) {
				setBusymode(true, lastPointerX, lastPointerY);
			}
			return true;
		}

		for (int i = 0; i < components.size(); i++) {
			Row row = (Row) components.get(i);
			if (row.getTop() + row.getHeight() < verticalOffset) {
				continue;
			}
			if (row.getTop() > verticalOffset + viewportHeight) {
				break;
			}
			if (row.isAnimated(verticalOffset, viewportHeight)) {
				row.clock(verticalOffset, viewportHeight);
				repaint = true;
			}
		}

		return repaint;
	}

	/**
	 * 查找当前屏幕上的下一个热点
	 * @param lookfor true表示向后查找
	 */
	private void findPointerInCurrentScreen(boolean lookfor) {
		if (currentPointer != -1) {
			Component c = (Component) hotpots.get(currentPointer);
			if (componentInScreen(c)) {
				return;
			}
		}
		if (lookfor) {
			for (int i = currentPointer + 1; currentPointer != -1 && i < hotpots.size(); i++) {
				Component c = (Component) hotpots.get(i);
				if (componentInScreen(c)) {
					((Component) hotpots.get(currentPointer)).setSelected(false);
					currentPointer = i;
					((Component) hotpots.get(currentPointer)).setSelected(true);
					break;
				}
			}
		} else {
			for (int i = currentPointer - 1; currentPointer != -1 && i > -1; i--) {
				Component c = (Component) hotpots.get(i);
				if (componentInScreen(c)) {
					((Component) hotpots.get(currentPointer)).setSelected(false);
					currentPointer = i;
					((Component) hotpots.get(currentPointer)).setSelected(true);
					break;
				}
			}
		}
	}

	public void internalValidateEvent(Component c) {
		if (mainCanvas != null) {
			internalHeight -= c.getHeight();
			c.setWidth((getWidth() - Settings.SCROLLBAR_WIDTH));
			c.validate();
			internalHeight += c.getHeight();
			mainCanvas.repaint();
		}
	}

	public void setCurrent(Displayable d) {
		if (mainCanvas != null) {
			Handset.getDisplay().setCurrent(d);
		}
	}

	public void setContainerCurrent() {
		if (mainCanvas != null) {
			//control.setContainerCurrent();
		}
	}

	synchronized public void validate() {
		//		Row memory = new Row();
		//		memory.add(new TextBlock(Demo.memory()));
		//		add(memory);

		//onActive();

		int width = mainCanvas.getWidth();
		viewportHeight = mainCanvas.getHeight() - getTopHeight() - getBottomHeight();
		//System.out.println("viewportHeight = " + viewportHeight + "/" + control.getHeight());
		showscrollbar = false;
		internalHeight = 0;
		verticalOffset = 0;

		//首先,假设不需要滚动条
		int top = getTopHeight();
		for (int i = 0; i < components.size(); ++i) {
			Row c = (Row) components.get(i);
			c.setInnerTop(top);
			c.setWidth(width);
			c.validate();
			internalHeight += c.getHeight();
			top += c.getHeight();
			if (internalHeight > viewportHeight) { //需要滚动条
				this.showscrollbar = true;
				break;
			}
		}

		if (!showscrollbar) {
			setWidth(width);
			setHeight(mainCanvas.getHeight());
			resetPointer();
			return;
		}

		//需要滚动条,重新计算
		showscrollbar = true;
		internalHeight = 0;
		width -= Settings.SCROLLBAR_WIDTH;
		top = getTopHeight();
		for (int i = 0; i < components.size(); ++i) {
			Row c = (Row) components.get(i);
			c.setInnerTop(top);
			c.setWidth(width);
			c.validate();
			internalHeight += c.getHeight();
			top += c.getHeight();

			//			System.out.println("row[" + i + "]:" + c.getClass().getName()
			//					+ ", innertop = " + c.getInnerTop() + ", innerleft = "
			//					+ c.getInnerLeft());
		}
		internalHeight += 5;
		setWidth(width);
		scrollbarHeight = viewportHeight * viewportHeight / internalHeight;
		scrollbarHeight = scrollbarHeight < 16 ? 16 : scrollbarHeight;
		setHeight(mainCanvas.getHeight());

		resetPointer();
	}

	public int getTopHeight() {
		if (showTitle) {
			return 20;
		}
		return 0;
	}

	protected void drawScrollbar(Graphics g, int adjustx, int adjusty) {
		int width = getWidth();
		if (showscrollbar) {
			width += Settings.SCROLLBAR_WIDTH;
		}

⌨️ 快捷键说明

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