Java 如何创建用于打印的JFace对话框的屏幕截图?

Java 如何创建用于打印的JFace对话框的屏幕截图?,java,eclipse-plugin,swt,jface,Java,Eclipse Plugin,Swt,Jface,我目前正在开发一个eclipse插件,它向用户显示一个条目表 如果用户双击tablerow,将打开一个自定义JFace对话框,用户可以在其中打印或取消该对话框 如何将对话框的屏幕截图创建为图像 我现在的尝试只给了我一个小矩形 PrintDialog dialog = new PrintDialog(this.getShell(), SWT.NONE); PrinterData data = dialog.open(); if(data == null) {

我目前正在开发一个eclipse插件,它向用户显示一个条目表

如果用户双击tablerow,将打开一个自定义JFace对话框,用户可以在其中打印或取消该对话框

如何将对话框的屏幕截图创建为图像

我现在的尝试只给了我一个小矩形

    PrintDialog dialog = new PrintDialog(this.getShell(), SWT.NONE);
    PrinterData data = dialog.open();
    if(data == null)
    {
        return;
    }

    GC gc = new GC(this.getShell().getDisplay());
    final Image image = new Image(this.getShell().getDisplay(), this.getShell().getBounds());
    gc.copyArea(image, this.getShell().getBounds().x, this.getShell().getBounds().y);
    gc.dispose();

    Printer printer = new Printer(data);
    if(printer.startJob("Print"))
    {

        GC g = new GC(printer);

        if(printer.startPage())
        {
            g.drawImage(image, 0, 0);
        }

        g.dispose();
        printer.endPage();


    }
    printer.endJob();
    printer.dispose();

问题在于订单。首先应该创建图像。 我没有意识到屏幕截图的大小是正确的,但是被打印对话框覆盖了

GC gc = new GC(this.getShell().getDisplay());
final Image image = new Image(this.getShell().getDisplay(),this.getShell().getBounds());
gc.copyArea(image, this.getShell().getBounds().x, this.getShell().getBounds().y);
gc.dispose();    

PrintDialog dialog = new PrintDialog(this.getShell(), SWT.NONE);
PrinterData data = dialog.open();
if(data == null)
{
    return;
}

Printer printer = new Printer(data);
if(printer.startJob("Print"))
{

    GC g = new GC(printer);

    if(printer.startPage())
    {
        g.drawImage(image, 0, 0);
    }

    g.dispose();
    printer.endPage();


}
printer.endJob();
printer.dispose();

创建的
图像
是否包含整个区域?图像包含打开的PrinterDialog的一小部分区域,但我以前认为创建图像会阻止这种行为。我的意思是:您创建的实际
图像
实例(称为
图像
)是否包含整个区域?你用来在打印机上画画的那个?啊,对不起,是的。哦,对不起,我发现了问题,愚蠢的我:我应该先创建图像,而不是打印机对话框。