如何在没有显示的情况下在Java SWT中创建图像

时间:2016-11-02 16:23:27

标签: java swt

我正在学习SWT,目标是创建一个向导。我正在修改现有的教程。此时,我试图在向导的一个页面中显示图像:

class FrontPage extends WizardPage {

  FrontPage() {
    super("FrontPage");
    setTitle("Listes des joueurs");
    setDescription("Veuillez déplacer toutes les listes dans le même fichier (ex: C:\\Badminton\\)");
  }

  public void createControl(Composite parent) {
    Composite composite = new Composite(parent, SWT.NULL);
    GridLayout gridLayout = new GridLayout(2, false);
    composite.setLayout(gridLayout);

    Canvas canvas = new Canvas(composite, SWT.NONE);
    canvas.setBounds(10, 10, 693, 253);

    canvas.addPaintListener(new PaintListener() {
      public void paintControl(PaintEvent e) {
        Image image = new Image(null, "C:\\Benoit\\Work\\Java\\Badminton\\Folder_List_Players.png");

        e.gc.drawImage(image, 10, 10);

        image.dispose();
      }
    });

    setControl(composite);

  }

}

运行此代码时,我的图像大约为600 x 200,显示为缩略图(10x10)。我想将它显示为全尺寸。

  1. 据我所知,我可能在Image构造函数中有一个Display对象,但我不确定如何使它与Composite父对象一起使用。然而有趣的是,我仍然可以使用null显示对象显示图像。

  2. canvas.setBounds(10,10,693,253);似乎没有任何影响。

  3. 提前感谢任何提示或帮助!!!

1 个答案:

答案 0 :(得分:3)

如果使用空显示创建图像,则使用当前显示。为清楚起见,在创建图像时应始终提供显示。

并且当前显示器的引用也不缺,例如:

Display display = event.display;

Display display = parent.getDisplay();

要显示图片,请选择使用Label,如下所示:

Label imageLabel = new Label( parent, SWT.NONE );
imageLabel.setImage( ... );

要布局控件,请远离使用setBounds()和绝对坐标。请改用布局管理器:https://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html