Нарисуйте дерево изображений для изображения - PullRequest
0 голосов
/ 04 февраля 2020

Допустим, я хочу нарисовать обычный старый IFigure в Image. Я бы использовал такой код:

Rectangle bounds = new Rectangle(0, 0, 400, 300);
Image image = new Image(Display.getCurrent(), bounds.width, bounds.height);

GC gc = new GC(image);
gc.drawLine(0, 0, bounds.width, bounds.height);
SWTGraphics graphics = new SWTGraphics(gc);

IFigure figure = new Label("Test");
figure.setBounds(bounds);
figure.paint(graphics);

try {
    Path tempFile = Files.createTempFile(null, ".png");

    ImageLoader saver = new ImageLoader();
    saver.data = new ImageData[]{image.getImageData()};
    saver.save(tempFile.toString(), SWT.IMAGE_PNG);

    Program.launch(tempFile.toString());
} finally {
    image.dispose();
}

Это работает и создает изображение, подобное этому:

crossed Test

Пока что, так хорошо. Теперь я на самом деле хочу нарисовать XYGraph (из туманности Затмения):

IFigure figure = new XYGraph();
figure.setBounds(bounds);
figure.paint(graphics);

Полученное изображение полностью пустое, поэтому XYGraph нарисовано (поэтому диагональная линия отсутствует), однако ее содержимое пусто.

Во время отладки я обнаружил, что границы детей не установлены, поэтому я попробовал это с другими видами IFigure деревьев:

Panel figure = new Panel();
figure.add(new Label("Test"));
figure.setBounds(bounds);

Проблема та же: пустой прямоугольник рисуется по диагональной линии, но без содержания. Я попробовал следующие методы в надежде заставить фигуру расположить своих детей (т.е. дать им некоторые границы):

figure.setLayoutManager(new GridLayout()); 
figure.revalidate();
figure.repaint();
figure.getUpdateManager().performUpdate();
...

Однако ничего не помогает. Как нарисовать дерево IFigure с?

...