Холст слишком мал для отображения изображения в SWT - PullRequest
1 голос
/ 21 октября 2010

Я пытаюсь использовать 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);
  }
});

Область холста в итоге становится крошечной рамкой размером около 30x30, независимо от того, насколько велик MYFILE.gif.Что за черт?

Все, что я пытаюсь использовать для установки размера холста (setSize, setBounds и т. Д.), Ничего не делает.

1 Ответ

2 голосов
/ 21 октября 2010

Попробуйте использовать setPreferredSize.Менеджер по расположению вызовет setSize и / или setBounds и обнулит значения, которые вы установили, но попытается соблюдать предпочтительный размер, если сможет.Вы также можете использовать setMaximumSize и setMinimumSize, чтобы контролировать, как будет изменяться размер холста при изменении размера вмещающего компонента.

РЕДАКТИРОВАТЬ: Для SWT вы можете попробовать это:

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

IЯ не эксперт по SWT, но документация по SWT кажется полезной.

...