2009-11-22 34 views

Respuesta

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

¿Podría complacer a todo el código de clase? Tengo problemas para que funcione. Gracias! – Hectoret

+0

He editado la clase. Compila, pero en realidad no lo he probado. –

0

No, puede agregar un PaintListener a un botón, pero probablemente se vea realmente extraño.

Lo que tendría que hacer es establecer el estilo de la ventana como "dibujado por el propietario" y luego agregar su código de dibujo en el método Button # wmDrawChild. Esto significa que debe agregar dependencias en las clases SWT internas y solo funcionará para Windows.

Cuestiones relacionadas