Допустим, я хочу нарисовать обычный старый 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();
}
Это работает и создает изображение, подобное этому:
Пока что, так хорошо. Теперь я на самом деле хочу нарисовать 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
с?