画布太小,无法在SWT中显示图像

时间:2010-10-20 21:48:27

标签: java image canvas swt

我正在尝试使用Canvas来显示动画gif。我有动画工作,但画布太小,无法看到整个图像,我无法调整大小。

我甚至无法将其设置为第一帧的正确大小,因此省略了动画/线程代码。我的代码如下:

Composite comp = new Composite(parent, SWT.None);
comp.setLayout(new GridLayout(1, false));

final ImageLoader loader = new ImageLoader();
loader.load(getClass().getClassLoader().getResourceAsStream("MYFILE.gif"));

final Canvas canvas = new Canvas(comp, SWT.None);
final Image image = new Image(Display.getCurrent(), loader.data[0]);

canvas.addPaintListener(new PaintListener() {
  public void paintControl(PaintEvent e) {
    e.gc.drawImage(image, 0, 0);
  }
});

无论MYFILE.gif有多大,帆布区最终都是一个大约30x30的小盒子。怎么了?

我尝试用来设置画布大小(setSize,setBounds等)的任何内容都不起作用。

1 个答案:

答案 0 :(得分:2)

尝试使用setPreferredSize。布局管理器会调用setSize和/或setBounds并破坏您设置的值,但如果可以,它会尝试尊重首选大小。您还可以使用setMaximumSizesetMinimumSize来控制如果调整封闭组件的大小,画布将如何调整大小。

编辑:对于SWT,你可以试试这个:

GridData gridData = new GridData();
gridData.widthHint = imageWidth;
gridData.heightHint = imageHeight;
canvas.setLayoutData(gridData);

我不是SWT专家,但the SWT documentation似乎很有帮助。