2011-12-06 40 views
1

我想構建一個gui應用程序,它應該完全繪製在畫布上,不會使用其他小部件。如何將鼠標懸停效果添加到gc繪製的「按鈕」

package cn.ggfan.fun.music.gui; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.PaintEvent; 
import org.eclipse.swt.events.PaintListener; 
import org.eclipse.swt.graphics.Color; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Canvas; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class GGPlayerGUI { 

    private static Shell shell; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     final Display display = new Display(); 

     shell = new Shell(display, SWT.NO_TRIM | SWT.RESIZE); 
     shell.setLayout(new FillLayout()); 
     shell.setSize(300, 500); 
     shell.setAlpha(200); 
     Canvas canvas = new Canvas(shell, SWT.NONE); 
     canvas.setBackground(display.getSystemColor(SWT.COLOR_BLACK)); 
     canvas.addPaintListener(new PaintListener(){ 

      public void paintControl(PaintEvent e) { 
       e.gc.setAlpha(255); 
       e.gc.setAntialias(SWT.ON); 
       e.gc.setLineWidth(2); 
       e.gc.setForeground(new Color(display, 187, 30, 136)); 
       e.gc.drawLine(0, 80, 300, 80); 
       e.gc.drawLine(0, 450, 300, 450); 
       //gc.fillPolygon(new int[] { 25,5,45,45,5,45 }) 
       e.gc.setBackground(new Color(display, 187, 30, 136)); 
       e.gc.fillPolygon(new int[]{100,470,90,475,100,480}); 
       e.gc.fillPolygon(new int[]{110,470,100,475,110,480}); 
       //e.gc.fillPolygon(new int[]{100,470,90,475,100,480}); 
       e.gc.fillRoundRectangle(145,470,3,10,2,2); 
       e.gc.fillRoundRectangle(152,470,3,10,2,2); 

       e.gc.fillPolygon(new int[]{200,470,210,475,200,480}); 
       e.gc.fillPolygon(new int[]{190,470,200,475,190,480}); 
       e.gc.setForeground(new Color(display, 250, 250, 250)); 
       //e.gc.setLineWidth(1); 
       e.gc.drawOval(80, 455, 40, 40); 
       e.gc.drawOval(130, 455, 40, 40); 
       e.gc.drawOval(180, 455, 40, 40); 
      } 
     }); 

     shell.open(); 

     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 

     display.dispose(); 
    } 

} 

它看起來像這樣:
enter image description here
我應該怎麼做才能讓「按鈕」可以點擊,並有懸停效果?

回答

4

如果我正確理解您的代碼,您的按鈕是圓形(橢圓形)在Canvas

您需要編寫一個位置方法,以確定Canvas上的特定x,y點是否位於其中一個橢圓的內部或外部。您可以使用MouseMoveListenermouseMove方法與您的位置方法一起確定鼠標何時位於您的某個橢圓內部或外部。

如果鼠標在橢圓內,則繪製橢圓形的「懸停」版本。如果鼠標在橢圓外,則繪製橢圓的常規版本。

您可以使用MouseListener,mouseDown方法與您的位置方法一起確定用戶何時在其中一個橢圓上點擊。

相關問題