2014-03-05 40 views
1

Java中有一種方法可以爲標籤提供突出效果嗎?
例如,假設我有一個帶有圖片的標籤,並且每當鼠標光標進入時都想突出顯示它。
我試圖在谷歌環顧四周,我可以找到的唯一提示是使用label.setBackground(display.getSystemColor(SWT.COLOR_YELLOW)); 但這顯然不會突出標籤,更不用說帶有圖片的標籤。
因爲首先,它也是也是黃色,第二,它會出現好像顏色在圖片後面(當然,因爲它是setBackground()當然)。
我正在尋找一個更明亮的黃色,也將是透明的,所以圖像將被看到。
希望我的意圖很清楚。給予標籤突出效果 - Java SWT

回答

3

你可以添加一個ListenerSWT.MouseEnterSWT.MouseExit並跟蹤鼠標是否懸停在Label,然後重繪其與定製ListenerSWT.Paint

private static boolean hovering = false; 

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new FillLayout()); 

    final Label label = new Label(shell, SWT.NONE); 
    final Image image = display.getSystemImage(SWT.ICON_ERROR); 

    Listener mouseHover = new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      hovering = e.type == SWT.MouseEnter; 
      label.redraw(); 
     } 
    }; 

    label.addListener(SWT.MouseEnter, mouseHover); 
    label.addListener(SWT.MouseExit, mouseHover); 
    label.addListener(SWT.Paint, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      int x = label.getBounds().width/2 - image.getBounds().width/2; 
      int y = label.getBounds().height/2 - image.getBounds().height/2; 
      e.gc.drawImage(image, x, y); 

      if(hovering) 
      { 
       e.gc.setAlpha(50); 
       e.gc.setBackground(display.getSystemColor(SWT.COLOR_YELLOW)); 
       e.gc.fillRectangle(label.getBounds()); 
      } 
     } 
    }); 

    shell.pack(); 
    shell.setSize(100, 100); 
    shell.open(); 

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

是這樣的:

enter image description here enter image description here