2017-11-30 1 views
0

캔버스를 반투명 배경으로 만들고 싶습니다. 그래서 시도 이런 식으로 뭔가 : 나는 공을 넣어하지 않는 한 내가 만약 내가 캔버스의 배경으로 사용반투명 배경을 가진 캔버스

import org.eclipse.swt.SWT; 
import org.eclipse.swt.graphics.Color; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Canvas; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class Main { 

    public static int WIDTH=500; 
    public static int HEIGHT=70; 
    public static void main (String [] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setSize(WIDTH,HEIGHT); 
     shell.setLayout(new GridLayout()); 
     shell.setBackground(display.getSystemColor(SWT.COLOR_RED)); 
     create(shell); 


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


    private static void create(Shell shell){ 
     Canvas c= new Canvas(shell, SWT.DOUBLE_BUFFERED); 
     GridData gd= new GridData(); 
     gd.heightHint=HEIGHT-30; 
     gd.widthHint=WIDTH-30; 
     c.setLayoutData(gd); 
     c.setBackgroundMode(SWT.INHERIT_FORCE); 
     c.setBackground(new Color(shell.getDisplay(), 255, 255, 255, 100)); 
    } 

} 

그러나 컬러 (100)의 알파 부분은, SWT에 의해 고려하지 않는 것 0을 사용하면 캔버스가 완전히 투명 해집니다. 다른 모든 경우에는 불투명합니다. 여기에 실수를하거나 SWT 문제가 있습니까? 그렉-449은 Windows 환경에 대한 SWT에서 버그가 지적

나는 윈도우 8

+1

코드는 맥 OS에서 작동 확인 그래서 이것은 Windows 제한 일 수 있습니다 (Windows에서는 테스트 할 수 없습니다). –

+0

또한 색상 투명성 코드가 최신이며 최신 릴리스에서 업데이트되었으므로 최신 버전의 SWT가 있는지 확인하십시오. –

+0

Greg, STW 버전을 사용하고 있습니까? 저는 4.629 버전입니다. – navy1978

답변

0

에 SWT를 사용하고 있습니다. 내가 SWT에서 결함을 열었습니다 : 우리는 항상 우리 자신에 의해 캔버스 그림 GC에 aplha을 설정할 수 있습니다 해결 방법으로 https://bugs.eclipse.org/bugs/show_bug.cgi?id=528249

,이 방법은 모든 환경에서 작동합니다

import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.PaintEvent; 
import org.eclipse.swt.events.PaintListener; 
import org.eclipse.swt.graphics.Rectangle; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Canvas; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class Main { 

    public static int WIDTH=500; 
    public static int HEIGHT=70; 
    public static void main (String [] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setSize(WIDTH,HEIGHT); 
     shell.setLayout(new GridLayout()); 
     shell.setBackground(display.getSystemColor(SWT.COLOR_RED)); 
     create(shell); 


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


    private static void create(Shell shell){ 
     Canvas c= new Canvas(shell, SWT.DOUBLE_BUFFERED); 
     GridData gd= new GridData(); 
     gd.heightHint=HEIGHT-30; 
     gd.widthHint=WIDTH-30; 
     c.setLayoutData(gd); 
     c.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_TRANSPARENT)); 
     c.setBackgroundMode(SWT.INHERIT_FORCE); 
     c.addPaintListener(new PaintListener() { 
      public void paintControl(PaintEvent e) { 
       Rectangle clientArea = c.getClientArea(); 
       e.gc.setAlpha(100); 
       e.gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); 
       e.gc.fillRectangle(clientArea.x,clientArea.y,clientArea.width-1,clientArea.height-1); 
      } 
     }); 
    } 

} 
관련 문제