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

📄 menubarcanvas.java

📁 使用j2me实现二级菜单
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			  // 必须有repaint,展开的菜单才会消隐!
			  repaint();
		  }
  
		    /**********************************************************
			//	 MenuBarCanvas::updateMenuBar()
			//
			//	 Description:
			//	  更新并重新绘制第一级菜单(主菜单)
			//
			//	 Parameters:
			//	 Return Values:
			//	 Author:
			//	      zhengyun@ultrapower 2006.02.13
			//
			**********************************************************/
		   	public void updateMenuBar()
	        {
				System.out.println("Enter updateMenuBar!");
		   
		          if (m_MenuTable == null)
		          {
					  System.out.println("创建一个新MenuTable!");
					  m_MenuTable = new Hashtable();
		          }
				  m_MenuTable.clear();
				  
		          // 添加主菜单项
		          this.addMenu(MyFeedsCmd);  
		          this.addMenu(SettingsCmd); 
		          this.addMenu(StatCmd); 
		          this.addMenu(AboutMeCmd);  
	
				  // 重置各项参数
				  m_MenuSelectedIndex = 0;
				  m_MenuBarTable = null;
				  m_selectedBarID = 0;
				  
				  // 计算每个菜单项的位置
		          updateMenuItemCoordinate();
	
				  repaint();
	      }
	      
	      
			/**********************************************************
			//	 MenuBarCanvas::addMenu()
			//
			//	 Description:
			//	  添加菜单项
			//
			//	 Parameters:
			 * 		mi - 要添加的菜单项对象
			//	 Return Values:
			//	 Author:
			//	      zhengyun@ultrapower 2006.02.13
			//
			**********************************************************/
	      public void addMenu(MenuItem mi)
	      {
			  System.out.println("Enter addMenu(MenuItem)!mi.menuid=" +
					  mi.menuid);
			
			  m_MenuTable.put(new Integer(mi.menuid), mi);
	      }
	   
	   
		    /**********************************************************
			//	 MenuBarCanvas::updateMenuItemCoordinate()
			//
			//	 Description:
			//	  计算各个菜单项的坐标
			//
			//	 Parameters:
			//	 Return Values:
			//	 Author:
			//	      zhengyun@ultrapower 2006.02.13
			//
			**********************************************************/
	      public void updateMenuItemCoordinate()
	      {
			  System.out.println("Enter updateMenuItemCoordinate!计算各个菜单项的坐标");
			  
	          int firstmenunum = 0;
	          Enumeration menus = m_MenuTable.elements();
	          // 从大到小的排列
	          int i = 0;

	          int menunum = m_MenuTable.size(); //菜单个数
			  System.out.println("菜单个数:" + menunum);
			  int nMenuBottomY = getHeight()*4/5;
	          while (menus.hasMoreElements())
	          {
	              MenuItem menuitem = (MenuItem) menus.nextElement();
	              MenuItem parent = menuitem.MenuParent;
	              if (parent == null)
	              {
					  System.out.println("没有parent");
	                  menuitem.offx = 5;
	                  menuitem.offy = nMenuBottomY - i * m_MenuItemHeight;
	              }
	              else
	              {
					  // 这就是子菜单了
					  System.out.println("有parent");
	                  menuitem.offx = 60;
	                  int offy0 = (parent.offy + (menunum / 2) * m_MenuItemHeight);
	                  menuitem.offy = (offy0 > nMenuBottomY ? nMenuBottomY : offy0) -
	                      i * m_MenuItemHeight - 3;
	              }
				  System.out.println("计算菜单绘制偏移数值.menuitem.offx=" +
						  menuitem.offx + ";menuitem.offy=" + menuitem.offy);
				  
	              i++;

	          }
			  
	          menus = null;
	      }
	    
	    /**********************************************************
		//	 MenuBarCanvas::doMenuHandle()
		//
		//	 Description:
		* 		执行菜单命令或
	    * 		展开二级菜单。
	    * 
	    * 		如果当前菜单没有子菜单,自当直接执行菜单命令;
	    * 		如若有子菜单,将立即展开子菜单。
		//
		//	 Parameters:
		//	 Return Values:
		//	 Author:
		//	      zhengyun@ultrapower 2006.02.13
		//
		**********************************************************/
	    public void doMenuHandle()
	    {
		   	  System.out.println("Enter doMenuDown!执行菜单或展开二级菜单");
		   
			  // 得到当前选中的菜单项对象
	          MenuItem menuitem = this.getSelectedMenuItem();

	          if (menuitem == null)
	          {
	              return;
	          }
	           
	          // 是否有子菜单,有的话就保留当前父菜单
	          if (menuitem.hasIssue)
	          {
				  System.out.println("是否有子菜单,有的话就保留当前父菜单!");
				  
	              // 将当前菜单项都拷贝存储到一级菜单存储器中
				  m_MenuBarTable = new Hashtable();
	              Enumeration menus = m_MenuTable.elements();
	              // 从大到小的排列
	              while (menus.hasMoreElements())
	              {
	                  MenuItem mi = (MenuItem) menus.nextElement();
					  m_MenuBarTable.put(new Integer(mi.menuid), mi);
	              }
	              menus = null;
				  m_selectedBarID = m_MenuSelectedIndex;

	          }
			  
			  //////////////////////////////////////////////////////////////
	          // 菜单命令处理
	          if (menuitem == MyFeedsCmd) 
	          {
	              // 重新构造第二级菜单(子菜单)
				  updateMyFeedMenu();
	          }	          
	          else if (menuitem == SettingsCmd) 
	          {
	             /// 重新构造第二级菜单(子菜单)
				  updateSettingsMenu();
	          }
	          else
	          if (menuitem == AboutMeCmd) // 暂且定为"回到桌面"功能
	          {
				  // 关闭菜单
				  CloseMenuBar();
				  System.out.println("当前既没有子菜单,我们就知道用户是点击选择菜单命令了!");
	          }
			  //////////////////////////////////////////////////////////////
	   }
	   
	   
		/**********************************************************
		//	 MenuBarCanvas::getSelectedMenuItem()
		//
		//	 Description:
		* 		返回被选择的菜单项;
		//
		//	 Parameters:
		//	 Return Values:
		 * 		MenuItem - 菜单项对象
		//	 Author:
		//	      zhengyun@ultrapower 2006.02.13
		//
		**********************************************************/
	      public MenuItem getSelectedMenuItem()
	      {
			  System.out.println("Enter getSelectedMenuItem:" + m_MenuSelectedIndex);
			  
	          Enumeration menus = m_MenuTable.elements();
	          int menunum = m_MenuTable.size(); // 菜单个数
	          int i = menunum - 1;
	          // m_MenuSelectedIndex是指的显示出来的菜单编号实际上也是菜单项储存的顺序编号
	          while (menus.hasMoreElements())
	          {
	              MenuItem menuitem = (MenuItem) menus.nextElement();

	              if (this.m_MenuSelectedIndex == i)
	              {
					  System.out.println("找到了SelectedMenuItem:" + menuitem.menustr
							  + ";是否有子菜单:" + menuitem.hasIssue);
	                  return menuitem;
	              }
	              i--;

	          }
			  System.out.println("没有找到SelectedMenuItem");
	          return null;
	      }

		  /**********************************************************
			//	 MenuBarCanvas::updateMyFeedMenu()
			//
			//	 Description:
			* 		更新"我的订阅"的二级菜单
			//
			//	 Parameters:
			//	 Return Values:
			//	 Author:
			//	      zhengyun@ultrapower 2006.02.13
			//
			**********************************************************/
	      public void updateMyFeedMenu()
	      {
		      System.out.println("Enter updateMyFeedMenu!");
			  
			  m_MenuTable.clear();


			  // 添加子菜单项
	          this.addMenu(Feed1Cmd);  
	          this.addMenu(Feed2Cmd);  
	          this.addMenu(Feed3Cmd);  
	          this.addMenu(Feed4Cmd);  
			  this.addMenu(Feed5Cmd); 
			  this.addMenu(Feed6Cmd);  
			  this.addMenu(Feed7Cmd);  
			  
			  m_MenuSelectedIndex = 0;
			  // 再次计算这些菜单项的偏移坐标
	          updateMenuItemCoordinate();

			  repaint();
			  System.out.println("End updateMyFeedMenu!");
	      }
		  
		  /**********************************************************
			//	 MenuBarCanvas::updateSettingsMenu()
			//
			//	 Description:
			* 		更新"设置"的二级菜单
			//
			//	 Parameters:
			//	 Return Values:
			//	 Author:
			//	      zhengyun@ultrapower 2006.02.13
			//
			**********************************************************/
	      public void updateSettingsMenu()
	      {
		      System.out.println("Enter updateSettingsMenu!");
			  
			  m_MenuTable.clear();
	          		  
			  addMenu(BloglinesUserNameCmd);
	          addMenu(BloglinesUserPassCmd); 
	          addMenu(UsingCmwapCmd);
			  
			  m_MenuSelectedIndex = 1;
	          updateMenuItemCoordinate();

			  repaint();
			  System.out.println("End updateSettingsMenu!");
	      }
 
		    /**********************************************************
			//	 MenuBarCanvas::updateSettingsMenu()
			//
			//	 Description:			
					针对Nokia全屏情况下getHeight的BUG,此函数出自于
		    * 		http://discussion.forum.nokia.com/forum/showthread.php?s=
		    *       5858f71392d6153eca8588dde860b4bc&threadid=48826
		    *
			//	 Parameters:
			//	 Return Values:
			//	 Author:
			//	      zhengyun@ultrapower 2006.02.13
			//
			**********************************************************/
		  public int getHeight(){
			  try{
				  if("Nokia".compareTo(System.getProperty("microedition.platform").substring(0,5)) == 0)
					  return 208;
				  else
					  return super.getHeight();
			  }
			  catch(Exception e){
				  return super.getHeight();
			  }
			}
		  
	  public void keyReleased(int keyCode){
	  }

	  public void keyRepeated(int keyCode){
	  }

	  public void commandAction(Command c, Displayable d){

	  }
	  
	  protected void destroyApp(boolean arg0) {
			// TODO Auto-generated method stub

		}
	  
	  ////////////////////////////////////////////////////////////////////////
	  //
	  // 工具函数集合
	  // zhengyun 20060216
	  // 
	  /**
	   * Returns specified image.
	   * @param id  The id of the image.
	   * @return    An image.
	   */
	  public static synchronized Image getImage(int id)
	  {
	    id -= OFFSET_IMG;
	    Image img = (Image)m_images.get(new Integer(id));
	    if (img == null)
	    {
	      try
	      {
			  /*
			   * 注意原来这里写的是"/" +,始终无法加载图像;
			   * 所以我改为了"/res/" + 
			   */
	        img = Image.createImage("/res/icons/" + IMGNAME_MAP[id]);
			System.out.println("get image:/res/icons/" + IMGNAME_MAP[id]);
	        m_images.put(new Integer(id), img);
	      }
	      catch (Exception e)
	      {
	        System.out.println("Error getting resource img " + IMGNAME_MAP[id]
	           + ">>" + e.getMessage());
	        e.printStackTrace();
	      }
	    }
	    return img;
	  }
	  
	  /*
	   * 将全屏简单的清空为白色,虽不适合将来较为复杂的背景,但目前就够用了
	   * 
	   * zhengyun 20060214
	   */
	  protected void ClearGraphics(Graphics g)
	  {
			// 清除背景
			g.setColor(m_borderFillRectColor);
			g.fillRect(0, 0, getWidth(), getHeight());		  
	  }
	  ////////////////////////////////////////////////////////////////////////
	}

⌨️ 快捷键说明

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