Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java打印整个JPanel_Java_Swing_Graphics_Printing - Fatal编程技术网

如何用Java打印整个JPanel

如何用Java打印整个JPanel,java,swing,graphics,printing,Java,Swing,Graphics,Printing,我试图打印应用程序中的JPanel,应用程序中的JPanel显示在下面(请注意水平和垂直滚动条): 当应用程序运行时,面板的高度会变得很长, 但当我打印它时,它不会打印整个宽度和高度 此外,纸张中面板的定位是向左对齐,而不是居中对齐。 下图显示了面板在纸上的显示方式,这看起来非常糟糕,因此请我需要帮助 1) 如何打印整个面板 2) 如何将其定位为集中在纸张上 这是我的密码: public void printWork() { PrinterJob pj = PrinterJob.ge

我试图打印应用程序中的JPanel,应用程序中的JPanel显示在下面(请注意水平和垂直滚动条):

当应用程序运行时,面板的高度会变得很长, 但当我打印它时,它不会打印整个宽度和高度

此外,纸张中面板的定位是向左对齐,而不是居中对齐。 下图显示了面板在纸上的显示方式,这看起来非常糟糕,因此请我需要帮助

1) 如何打印整个面板

2) 如何将其定位为集中在纸张上

这是我的密码:

public void printWork()
{
    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.setJobName(" Opt De Solver Printing ");

    pj.setPrintable(new Printable()
    {
        @Override
        public int print(Graphics pg, PageFormat pf, int pageNum)
        {
            if(pageNum > 0)
                return Printable.NO_SUCH_PAGE;

            Graphics2D g2 = (Graphics2D)pg;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            MainAppPanel.this.paintAll(g2);
            /* I've tried the following commented codes but they don't work */
            //MainAppPanel.this.printAll(g2);
            //MainAppPanel.this.print(g2);
            //MainAppPanel.this.print(g2);
            return Printable.PAGE_EXISTS;
        }
    });
    if(pj.printDialog() == false)
        return;
    try
    {
        pj.print();
    }
    catch(PrinterException xcp)
    {
        xcp.printStackTrace(System.err);
    }
}

我知道这已经晚了3年,但仅供参考:

您定义的页面上的图像在此处左上角的位置: g2.translate(pf.getImageableX(),pf.getImageableY())

因此,如果你想让它向右100点,向下150点,那么你可以:

g2.翻译(pf.getImageableX()+100,pf.getImageableY()+150)

此外,如果要缩放图像以使其更适合,请使用:

g2.量表(1,1)


其中1表示100%,因此0.5表示50%,1.5表示150%

请看一看,并了解更改“活动”组件的位置和大小可能会影响其在屏幕上的绘制方式。请给我一些时间来使用您给我的示例,我会回来回复,谢谢@疯狂程序员