使用SWT创建自定义按钮

我想问的问题与这个问题相同,但使用SWT:有没有办法用你自己的按钮图形制作一个按钮而不只是按钮内的图像? 如果不是在java中创建自定义按钮的另一种方法?

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 (ex < 0 || ey < 0 || ex > getBounds().width || ey > 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 (ex < 0 || ey < 0 || ex > getBounds().width || ey > 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); } } }); } } 

不,您可以将PaintListener添加到按钮,但它可能看起来很奇怪。

您需要做的是将窗口的样式设置为“所有者绘制”,然后在Button#wmDrawChild方法中添加绘图代码。 这意味着您需要在内部SWT类上添加依赖项,它只适用于Windows。