uti*_*vel 1 java printing swt components visible
我尝试将swt TreeViewer打印到png文件.附:
Tree tree = treeViewer.getTree();
Image image = new Image(display, tree.getSize().x, tree.getParent().getSize().y);
GC gc = new GC(image);
System.out.println(new File(pathToSave).getAbsolutePath());
tree.print(gc);
ImageLoader loader = new ImageLoader();
loader.data = new ImageData[] { image.getImageData() };
loader.save(pathToSave, SWT.IMAGE_PNG);
gc.dispose();
image.dispose();
Run Code Online (Sandbox Code Playgroud)
png仅包含树的可见部分.树有一个滚动条,因为它包含的元素多于表单上的元素.
我想打印所有元素可见而没有滚动条的树.有任何想法吗?
在swing组件上我可以使用.paintall().. swt组件似乎不知道.
首先,图像的大小应该具有树没有滚动的大小,而不是当前大小.为此你应该使用computeSize(SWT.DEFAULT, SWT.DEFAULT, true).然后你应该调整大小的树,打印,然后重新调整大小.由于您不希望用户注意到这一点,因此在此操作期间您应禁用绘图setRedraw(false).
这是一个完整的片段,完成所有这些:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new FillLayout());
final Tree tree = new Tree(composite, SWT.NONE);
for (int i = 0; i < 100; i++) {
final TreeItem treeItem = new TreeItem(tree, SWT.NONE);
treeItem.setText(String.format("item %d long name", i));
}
tree.addListener(SWT.DefaultSelection, new Listener() {
@Override
public void handleEvent(Event event) {
tree.getParent().setRedraw(false);
final Point originalSize = tree.getSize();
final Point size = tree.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
final Image image = new Image(display, size.x, size.y);
final GC gc = new GC(image);
tree.setSize(size);
tree.print(gc);
tree.setSize(originalSize);
final ImageLoader loader = new ImageLoader();
loader.data = new ImageData[]{image.getImageData()};
final String pathToSave = "out.png";
System.out.println(new File(pathToSave).getAbsolutePath());
loader.save(pathToSave, SWT.IMAGE_PNG);
gc.dispose();
image.dispose();
tree.getParent().setRedraw(true);
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
Run Code Online (Sandbox Code Playgroud)
按enter键保存文件.
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |