SWT Java - Помещение композита с фоном изображения на оболочку с фоном изображения - PullRequest
2 голосов
/ 09 ноября 2011

Я пишу графическое приложение, используя SWT. Сначала я создал оболочку с фоновым изображением (shell.setBackgroundImage (image)), затем я поместил композит с другим фоновым изображением, чтобы я мог использовать его (композитный) для размещения меток внутри него. Проблема в том, что я не могу избавиться от серой границы вокруг композита. Возможно ли это сделать вообще или, возможно, есть другие способы сделать это?

Вот код:

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class Test {

    protected static int gap = 20;

    public static void main (String[] args) {

       Display display = new Display();
       Shell shell = new Shell(display);   
       Image bg_Image = new Image(display, "bg_full.png"); 
       shell.setBackgroundImage(bg_Image);
       shell.setBackgroundMode(SWT.INHERIT_FORCE);  
       shell.setFullScreen(true);

       Image bg = new Image(display, "bg.png");
       Image border = new Image(display, "bg_info.png");
       Image b1 = new Image(display, "button_total_active.png");
       Image b2 = new Image(display, "button_terminal.png");
       Image b3 = new Image(display, "button_operator.png");
       Image b4 = new Image(display, "button_contract.png");

       Composite composite = new Composite(shell, SWT.NONE);
       composite.setBackgroundImage(bg);
       composite.setBackgroundMode(SWT.INHERIT_FORCE);
       composite.setBounds(80, 220, bg.getBounds().width, bg.getBounds().height);

       Label label1 = new Label(composite, SWT.NONE);
       label1.setImage(b1);
       label1.setBounds(gap, gap, b1.getBounds().width, b1.getBounds().height);

       Label label2 = new Label(composite, SWT.NONE);
       label2.setImage(b2);
       label2.setBounds(gap, gap*2+b1.getBounds().height, b2.getBounds().width, b2.getBounds().height);

       Label label3 = new Label(composite, SWT.NONE);
       label3.setImage(b3);
       label3.setBounds(gap, gap*3+b1.getBounds().height*2, b3.getBounds().width, b3.getBounds().height);

       Label label4 = new Label(composite, SWT.NONE);
       label4.setImage(b4);
       label4.setBounds(gap, gap*4+b1.getBounds().height*3, b4.getBounds().width, b4.getBounds().height);

       Label label5 = new Label(composite, SWT.NONE);
       label5.setImage(border);
       label5.setBounds(gap*2+b1.getBounds().width, gap, border.getBounds().width, border.getBounds().height);

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

   }
}

Вот пример изображения

1 Ответ

1 голос
/ 14 ноября 2011

Это не серые границы (вы удалили их с помощью SWT.INHERIT_FORCE), это прозрачные углы изображения, которые не прозрачны, потому что за ними находится композит.Насколько я знаю, вы не можете удалить углы изображения, используя его в качестве фона Composite.Если эти углы являются прозрачными (а не белыми), вы можете нарисовать это изображение в командной консоли (без создания какого-либо компонента), используя ГХ, как показано здесь .
При размещении прозрачных изображений поместите их на объектВы ожидаете увидеть позади.Надеюсь, я помог тебе.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...