📄 menubarcanvas.java
字号:
// 必须有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 + -