Image in button - j2me

后端 未结 1 1492
陌清茗
陌清茗 2021-01-23 18:42

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条回答
  • 2021-01-23 18:59

    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();
        }
    }
    
    0 讨论(0)
提交回复
热议问题