按钮中的图像 - j2me

发布于 2024-09-09 21:52:23 字数 185 浏览 3 评论 0原文

我正在尝试使用 J2ME 构建一个简单的基于菜单的 GUI。菜单项当前是从 Button 类派生的类的对象。有什么方法可以:

  1. 替换按钮中的文本并显示图像(类似图标)?

  2. 使文本和图像并排显示在同一菜单栏上。

如果我的问题不清楚,请告诉我,我会编辑它。

I am trying to build a simple menu-based GUI with J2ME. The menu entries are currently objects of classes derived from the class Button. Is there any way I can:

  1. Replace the text in the button and have an image show instead, sort of an icon?

  2. Make the text and image appear side by side on the same menu bar.

If my question is not clear, please let me know and I will edit it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦情居士 2024-09-16 21:52:24

您可以通过扩展 CustomItem

这是一个具有良好 MyButton 类的工作 MIDlet:

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.CustomItem;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.midlet.MIDlet;

public class TestMidlet extends MIDlet implements ItemStateListener {
    class MyButton extends CustomItem {
        private Image _image = null;
        private boolean _down = false;
        private int _clicks = 0;

        public MyButton(Image image) {
            super("");
            _image = image;
        }

        // Button's image
        public void setImage(Image image) {
            _image = image;
            repaint();
        }
        public Image getImage() {
            return _image;
        }

        // Has the button been clicked?
        public boolean isClicked() {
            if(_clicks>0) {
                _clicks -= 1;
                return true;
            }
            return false;
        }

        // Is the button currently down?
        public boolean isDown() {
            return _down;
        }
        public void setDown(boolean down) {
            if(_down)
                _clicks += 1;
            if(down!=_down) {
                _down = down;
                repaint();
                notifyStateChanged();
            }
        }
        public void setDown() {
            setDown(true);
        }
        public void setUp() {
            setDown(false);
        }

        // Minimal button size = image size
        protected int getMinContentHeight() {
            return getImage().getHeight();
        }
        protected int getMinContentWidth() {
            return getImage().getWidth();
        }
        // Preferred button size = image size + borders
        protected int getPrefContentHeight(int width) {
            return getImage().getHeight()+2;
        }
        protected int getPrefContentWidth(int height) {
            return getImage().getWidth()+2;
        }

        // Button painting procedure
        protected void paint(Graphics g, int w, int h) {
            // Fill the button with grey color - background 
            g.setColor(192, 192, 192);
            g.fillRect(0, 0, w, h);
            // Draw the image in the center of the button
            g.drawImage(getImage(), w/2, h/2, Graphics.HCENTER|Graphics.VCENTER);
            // Draw the borders
            g.setColor(isDown()?0x000000:0xffffff);
            g.drawLine(0, 0, w, 0);
            g.drawLine(0, 0, 0, h);
            g.setColor(isDown()?0xffffff:0x000000);
            g.drawLine(0, h-1, w, h-1);
            g.drawLine(w-1, 0, w-1, h);
        }

        // If FIRE key is pressed, the button becomes pressed (down state)
        protected void keyPressed(int c) {
            if(getGameAction(c)==Canvas.FIRE)
                setDown();
        }
        // When FIRE key is released, the button becomes released (up state)
        protected void keyReleased(int c) {
            if(getGameAction(c)==Canvas.FIRE)
                setUp();
        }
        // The same for touchscreens
        protected void pointerPressed(int x, int y) {
            setDown();
        }
        protected void pointerReleased(int x, int y) {
            setUp();
        }
    }

    MyButton button = null;

    public void itemStateChanged(Item item) {
        if(item==button) {
            if(button.isClicked())
                System.out.print("clicked, ");
            System.out.println(button.isDown()?"currently down":"currently up");
        }
    }

    public void startApp() {
        try {
            Form form = new Form("Example");
            button = new MyButton(Image.createImage("/icon.png"));
            form.append(button);
            form.setItemStateListener(this);
            Display.getDisplay(this).setCurrent(form);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
}

You can create your own Item that looks like a button by extending the CustomItem class.

This is a working MIDlet with a good MyButton class:

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.CustomItem;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.midlet.MIDlet;

public class TestMidlet extends MIDlet implements ItemStateListener {
    class MyButton extends CustomItem {
        private Image _image = null;
        private boolean _down = false;
        private int _clicks = 0;

        public MyButton(Image image) {
            super("");
            _image = image;
        }

        // Button's image
        public void setImage(Image image) {
            _image = image;
            repaint();
        }
        public Image getImage() {
            return _image;
        }

        // Has the button been clicked?
        public boolean isClicked() {
            if(_clicks>0) {
                _clicks -= 1;
                return true;
            }
            return false;
        }

        // Is the button currently down?
        public boolean isDown() {
            return _down;
        }
        public void setDown(boolean down) {
            if(_down)
                _clicks += 1;
            if(down!=_down) {
                _down = down;
                repaint();
                notifyStateChanged();
            }
        }
        public void setDown() {
            setDown(true);
        }
        public void setUp() {
            setDown(false);
        }

        // Minimal button size = image size
        protected int getMinContentHeight() {
            return getImage().getHeight();
        }
        protected int getMinContentWidth() {
            return getImage().getWidth();
        }
        // Preferred button size = image size + borders
        protected int getPrefContentHeight(int width) {
            return getImage().getHeight()+2;
        }
        protected int getPrefContentWidth(int height) {
            return getImage().getWidth()+2;
        }

        // Button painting procedure
        protected void paint(Graphics g, int w, int h) {
            // Fill the button with grey color - background 
            g.setColor(192, 192, 192);
            g.fillRect(0, 0, w, h);
            // Draw the image in the center of the button
            g.drawImage(getImage(), w/2, h/2, Graphics.HCENTER|Graphics.VCENTER);
            // Draw the borders
            g.setColor(isDown()?0x000000:0xffffff);
            g.drawLine(0, 0, w, 0);
            g.drawLine(0, 0, 0, h);
            g.setColor(isDown()?0xffffff:0x000000);
            g.drawLine(0, h-1, w, h-1);
            g.drawLine(w-1, 0, w-1, h);
        }

        // If FIRE key is pressed, the button becomes pressed (down state)
        protected void keyPressed(int c) {
            if(getGameAction(c)==Canvas.FIRE)
                setDown();
        }
        // When FIRE key is released, the button becomes released (up state)
        protected void keyReleased(int c) {
            if(getGameAction(c)==Canvas.FIRE)
                setUp();
        }
        // The same for touchscreens
        protected void pointerPressed(int x, int y) {
            setDown();
        }
        protected void pointerReleased(int x, int y) {
            setUp();
        }
    }

    MyButton button = null;

    public void itemStateChanged(Item item) {
        if(item==button) {
            if(button.isClicked())
                System.out.print("clicked, ");
            System.out.println(button.isDown()?"currently down":"currently up");
        }
    }

    public void startApp() {
        try {
            Form form = new Form("Example");
            button = new MyButton(Image.createImage("/icon.png"));
            form.append(button);
            form.setItemStateListener(this);
            Display.getDisplay(this).setCurrent(form);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文