2009-11-22 3 views
6

Я хотел бы задать то же самое, что и this question, но с помощью SWT: есть ли способ сделать кнопку со своей собственной графикой не только с изображением внутри кнопки? Если нет другого способа создать пользовательскую кнопку в java?Создайте пользовательскую кнопку с SWT

ответ

10
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

Не могли бы вы рассказать весь код класса? У меня проблемы с работой. Спасибо! – Hectoret

+0

Я редактировал класс. Он компилируется, но я его не проверял. –

0

Нет, вы можете добавить PaintListener к кнопке, но это, вероятно, будет выглядеть странно.

Что вам нужно сделать, так это установить стиль окна «нарисованный владелец» и добавить код рисования в метод Button # wmDrawChild. Это означает, что вам нужно добавлять зависимости к внутренним SWT-классам, и это будет работать только для Windows.

Смежные вопросы