2017-11-30 18 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)のアルファ部分は、私は0を入れない限り、私ならば、SWTによって考慮していないようです0を使用すると、キャンバスは完全に透明になり、他のすべての場合は不透明になります。 私はここで間違いを犯しましたか、またはSWTの問題ですか?

グレッグ-449は、これがWindows環境のためにSWTのバグです指摘したように、私は、Windows 8

+1

コードはMacOSでOK動作しますこれはWindowsの制限(Windowsではテストできません)の可能性があります。 –

+0

また、最新のバージョンのSWTを使用しているかどうかを確認するには、色透過コードが新しく、新しいリリースで更新されている必要があります。 –

+0

ありがとう、グレッグ、どのバージョンの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); 
      } 
     }); 
    } 

} 
関連する問題