Create a custom button with SWT

后端 未结 2 1882
夕颜
夕颜 2021-01-05 08:40

I would like to ask the same thing than this question but using SWT: Is there a way to make a Button with your own button graphic not just with an image inside the button? I

相关标签:
2条回答
  • 2021-01-05 09:13

    No, you can add a PaintListener to a button, but it will probably look really strange.

    What you would need to do is to set the style of the window to "owner drawn" and than add your drawing code in the Button#wmDrawChild method. This means you need to add dependencies on internal SWT-classes and it will only work for Windows.

    0 讨论(0)
  • 2021-01-05 09:20
    public class ImageButton extends Canvas {
        private int mouse = 0;
        private boolean hit = false;
    
        public ImageButton(Composite parent, int style) {
            super(parent, style);
    
            this.addPaintListener(new PaintListener() {
                public void paintControl(PaintEvent e) {
                    switch (mouse) {
                    case 0:
                        // Default state
                        e.gc.drawString("Normal", 5, 5);
                        break;
                    case 1:
                        // Mouse over
                        e.gc.drawString("Mouse over", 5, 5);
                        break;
                    case 2:
                        // Mouse down
                        e.gc.drawString("Hit", 5, 5);
                        break;
                    }
                }
            });
            this.addMouseMoveListener(new MouseMoveListener() {
                public void mouseMove(MouseEvent e) {
                    if (!hit)
                        return;
                    mouse = 2;
                    if (e.x < 0 || e.y < 0 || e.x > getBounds().width
                            || e.y > getBounds().height) {
                        mouse = 0;
                    }
                    redraw();
                }
            });
            this.addMouseTrackListener(new MouseTrackAdapter() {
                public void mouseEnter(MouseEvent e) {
                    mouse = 1;
                    redraw();
                }
    
                public void mouseExit(MouseEvent e) {
                    mouse = 0;
                    redraw();
                }
            });
            this.addMouseListener(new MouseAdapter() {
                public void mouseDown(MouseEvent e) {
                    hit = true;
                    mouse = 2;
                    redraw();
                }
    
                public void mouseUp(MouseEvent e) {
                    hit = false;
                    mouse = 1;
                    if (e.x < 0 || e.y < 0 || e.x > getBounds().width
                            || e.y > getBounds().height) {
                        mouse = 0;
                    }
                    redraw();
                    if (mouse == 1)
                        notifyListeners(SWT.Selection, new Event());
                }
            });
            this.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    if (e.keyCode == '\r' || e.character == ' ') {
                        Event event = new Event();
                        notifyListeners(SWT.Selection, event);
                    }
                }
            });
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题