📄 imgmenu.java
字号:
*/
public void setColor(int bkColor, int itemColor, int intervalColor, int textColor){
bk_rgb = bkColor;
item_rgb = itemColor;
interval_rgb = intervalColor;
text_rgb = textColor;
this.paintBK(g_bk);
}
/**
* 菜单
*将列表项焦点下移
*/
public int nextItem() {
int countDiff = getItemCount() - itemShowMaxCount;
itemFocus++;
if (countDiff > 0 && itemShowStartIndex <= itemFocus - itemShowMaxCount) {
itemShowStartIndex++;
}
if (itemFocus >= getItemCount()) {
itemFocus = 0; //自动循环跳转
if (countDiff > 0) {
itemShowStartIndex = 0;
}
}
//播放声音
playSound();
return itemFocus;
}
/**
*菜单
*将列表项焦点上移
*/
public int prevItem() {
int countDiff = getItemCount() - itemShowMaxCount;
itemFocus--;
//滚动
if (countDiff > 0 && itemFocus < countDiff &&
itemShowStartIndex > itemFocus) {
itemShowStartIndex--;
}
if (itemFocus < 0) {
itemFocus = (short)(getItemCount() - 1); //自动循环跳转
if (countDiff > 0) {
itemShowStartIndex = countDiff;
}
}
//播放声音
playSound();
return itemFocus;
}
/**
* 播放声音
*/
private void playSound(){
if (menuPlayer != null && bSoundOn) {
try{
if (menuPlayer.getState() == 0){
menuPlayer.stop();
}
menuPlayer.start();
}
catch(Exception e){System.out.println(e.toString());}
}
}
public void setSoundOn(boolean on){
bSoundOn = on;
}
/**
* 处理按键事件
* @param code int
*/
public void keyPressed(int code) {
if (active == false) {
return;
}
switch (code) {
case MsgCanvas.KEY_UP:
case MsgCanvas.UP:
if (!bImgMenu){
prevItem();
}
break;
case MsgCanvas.KEY_DOWN:
case MsgCanvas.DOWN:
if (!bImgMenu){
nextItem();
}
break;
case MsgCanvas.KEY_LEFT:
case MsgCanvas.LEFT:
if (bImgMenu){
prevItem();
}
break;
case MsgCanvas.KEY_RIGHT:
case MsgCanvas.RIGHT:
if (bImgMenu){
nextItem();
}
break;
case MsgCanvas.KEY_SELECT:
case MsgCanvas.KEY_SOFT1:
case MsgCanvas.FIRE:
if (itemFocus > 0 || itemFocus < getItemCount()) {
dispatchEvent(EVT_MENU_SELECT, itemFocus, getString(itemFocus));
}
break;
case MsgCanvas.KEY_SOFT2:
case MsgCanvas.KEY_CLEAR:
if (canReturn == true) {
dispatchEvent(EVT_MENU_CLOSE, -1, null);
}
break;
}
}
/**
* 绘制菜单,paint方法不能自己激发,需要主类方法调用
* @param g Graphics
* @param rtn boolean 是否有返回,退出
*/
public void updateSelf(Graphics g) {
if (!visible) {
return;
}
bFlash = !bFlash;
if (bImgMenu){
//System.out.println("paintImgMenu");
paintImgMenu(g);
}
else{
paintStringMenu(g);
}
}
/**
* 绘制图形菜单
* @param g Graphics
*/
private void paintImgMenu(Graphics g){
//先计算一些数据
try{
//先画背景
g.drawImage(img_bk, left, top, Graphics.LEFT | Graphics.TOP);
byte drawCount = itemShowMaxCount > itemVec.size() ? (byte) (itemVec.size()) :
itemShowMaxCount;
if (drawCount % 2 == 0) //偶数
drawCount++;
int drawLeft = (width - drawCount * this.itemHeight + itemInterval) / 2;
int drawTop = (height - this.itemHeight * 3) / 2;
byte w = (byte) (itemHeight - itemInterval); //实际绘制的菜单项比预算的要小一些
//画黄色背景
g.setColor(item_rgb);
g.fillRect(left, top, width, height - drawTop - itemHeight * 4 / 3); //填充背景
//画被选中的框框
g.fillRect(drawLeft + (drawCount >> 1) * itemHeight + itemInterval / 2,
height - drawTop - itemHeight,
w,
w);
//画分隔线
g.setColor(interval_rgb);
g.drawLine(0, height - drawTop - itemHeight - itemHeight / 3,
width, height - drawTop - itemHeight - itemHeight / 3);
//画图片
for (byte i = 0; i < drawCount; i++) {
int index = i + this.getFocusIndex() - drawCount / 2;
if (index >= itemVec.size())
index = index % itemVec.size();
while (index < 0)
index += itemVec.size();
g.setClip(drawLeft + i * itemHeight + itemInterval / 2,
height - drawTop - itemHeight,
w + 1,
w + 1);
g.drawImage(getImg(index),
drawLeft + i * itemHeight + itemHeight / 2,
height - drawTop - itemHeight / 2,
Graphics.HCENTER | Graphics.VCENTER);
g.setColor(interval_rgb);
g.drawRect(drawLeft + i * itemHeight + itemInterval / 2,
height - drawTop - itemHeight, w, w);
}
g.setClip(0, 0, width, height);
//画当前被选中的图片和文字
g.drawImage(getFocusImg(),
width / 2,
height - drawTop - itemHeight * 2,
Graphics.HCENTER | Graphics.BOTTOM);
g.setColor(text_rgb);
g.drawString(this.getFocusName(),
width / 2,
height - drawTop - itemHeight * 2 +
(itemHeight * 2 / 3 - textFont.getHeight()) / 2,
Graphics.HCENTER | Graphics.TOP);
}
catch(Exception e){
System.out.println(e.toString());
}
}
/**
* 绘制文字菜单
* @param g Graphics
*/
private void paintStringMenu(Graphics g){
try{
itemShowMaxCount = (byte) (this.height / itemHeight);
g.drawImage(img_bk, left, top, Graphics.LEFT | Graphics.TOP);
byte drawCount = itemShowMaxCount > itemVec.size() ?
(byte) (itemVec.size()) : itemShowMaxCount;
byte h = (byte) (itemHeight - itemInterval); //实际绘制的菜单项比预算的要小一些
int arcW = itemHeight / 2;
int w = (byte) (width * 0.8);
int drawLeft = (width - w) / 2;
int drawTop = (height - itemHeight * drawCount) / 2 + 1;
for (byte i = 0; i < drawCount; i++) {
int index = i + this.itemShowStartIndex;
if (index >= itemVec.size())
index = index % itemVec.size();
while (index < 0)
index += itemVec.size();
//画黄框
g.setColor(interval_rgb);
g.fillRoundRect(drawLeft + itemInterval / 2,
drawTop + itemHeight * i + itemInterval / 2, w, h, arcW,
arcW);
//画篮框
g.setColor(item_rgb);
g.fillRoundRect(drawLeft + itemInterval,
drawTop + itemHeight * i + itemInterval,
w - itemInterval, h - itemInterval, arcW, arcW);
//写文字
g.setColor(text_rgb);
String s = getString(index);
// if (s.length()>15)
// s = s.substring(0,15) + "...";
// g.setClip(drawLeft + 20,
// drawTop + i * itemHeight +
// (itemHeight - textFont.getHeight()) / 2,
// w - 40,
// h - itemInterval);
if (alignType == ALIGN_CENTER){
g.drawString(getString(index), width >> 1,
drawTop + i * itemHeight +
(itemHeight - textFont.getHeight()) / 2,
Graphics.HCENTER | Graphics.TOP);
}else{
g.drawString(s,
drawLeft + 20,
drawTop + i * itemHeight +
(itemHeight - textFont.getHeight()) / 2,
Graphics.LEFT | Graphics.TOP);
}
// g.setClip(0, 0, width, height);
//绘制闪烁图片
if (this.bFlash
&& img_flash != null
&& ( (ImgMenuItem) (itemVec.elementAt(index))).bFlashing) { //如果当前为显示闪烁图片状态
g.drawImage(img_flash,
drawLeft + w - 6,
drawTop + i * itemHeight +
(itemHeight - img_flash.getHeight()) / 2,
Graphics.RIGHT | Graphics.TOP);
}
}
if (itemVec.size() <= 0) {//如果没有菜单项
//显示“无”
g.drawString("无",
width/2 - textFont.stringWidth("无")/2,
height/2,
Graphics.LEFT | Graphics.TOP );
}else{
//画当前选中的选项
g.drawImage(img_point,
drawLeft + 6,
drawTop +
(getFocusIndex() - itemShowStartIndex) * itemHeight +
itemHeight / 2,
Graphics.LEFT | Graphics.VCENTER);
//System.out.println("paintStringMenu");
}
}
catch(Exception e){System.out.println(e.toString());}
}
/**
* 画背景
* @param g Graphics
*/
private void paintBK(Graphics g){
g.setColor(bk_rgb);
g.fillRect(left, top, width, height);//填充背景
}
/**
* 设置闪烁图片
* @param flashImg Image
*/
public void setFlashImg(Image flashImg){
this.img_flash = flashImg;
}
/**
* 菜单项
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class ImgMenuItem{
public Image img_item = null;//如果是图形菜单,则是必须提供的图片
public boolean bFlashing;//是否闪烁
public String itemCaption;//显示的文字
public String strData;//蔡单项携带的数据
public ImgMenuItem(){
bFlashing = false;
}
}
/**
* 设置文字菜单的对齐方式
* 图形菜单不存在对齐方式的问题
* @param type byte
*/
public void setAlignType(byte type){
alignType = type;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -