在同一页中打印两个 JPanel

发布于 2024-12-05 02:33:41 字数 1345 浏览 1 评论 0原文

我曾尝试在同一页中打印 2 个 JPanel,每个 jpanel 完全适合半页。

我所做的是将 jpanels 包装在另一个实现 Printable 的 jpanel 中。

问题是,仅正确打印第一个(顶部)jpanel,

页面的其余部分填充有灰色方块

这是Wrapper Jpanel的代码

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
            throws PrinterException
    {

        if (pageIndex == 0)
        {
            Graphics2D g2 = (Graphics2D) graphics;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);             
            g2.scale(.485, .473);    
            paint(graphics);    
            g2.setColor(Color.white);
             g2.fillRect(0, 0, 1, 1);

            return Printable.PAGE_EXISTS;
        } else
        {
            return Printable.NO_SUCH_PAGE;
        }

    }

这是调用代码

PrinterJob pj = PrinterJob.getPrinterJob();
        pj.setJobName("Factura Procter & Gamble");

        if (pj.printDialog())
        {
            try
            {
                for (int i = 0; i < 1; i++)
                {
                    pj.setPrintable(listaPaneles.get(i));
                    pj.print();

                }
            } catch (PrinterException e)
            {
                System.out.println(e);
            }
        }

请帮助我,谢谢。

I've been tried to print 2 JPanels in the same page, each jpanel fits perfectly in a half page.

What I do is wrap the jpanels in another jpanel that implements Printable.

The problem is that, only print correctly the first (top) jpanel,

the rest of the page is filled with a gray square

This is the code of the Wrapper Jpanel

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
            throws PrinterException
    {

        if (pageIndex == 0)
        {
            Graphics2D g2 = (Graphics2D) graphics;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);             
            g2.scale(.485, .473);    
            paint(graphics);    
            g2.setColor(Color.white);
             g2.fillRect(0, 0, 1, 1);

            return Printable.PAGE_EXISTS;
        } else
        {
            return Printable.NO_SUCH_PAGE;
        }

    }

This the calling code

PrinterJob pj = PrinterJob.getPrinterJob();
        pj.setJobName("Factura Procter & Gamble");

        if (pj.printDialog())
        {
            try
            {
                for (int i = 0; i < 1; i++)
                {
                    pj.setPrintable(listaPaneles.get(i));
                    pj.print();

                }
            } catch (PrinterException e)
            {
                System.out.println(e);
            }
        }

please help me, Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

-柠檬树下少年和吉他 2024-12-12 02:33:41

首先,我认为您不会将它们全部打印出来,

而是

for (int i = 0; i < 1; i++)
{
    pj.setPrintable(listaPaneles.get(i));
    pj.print();
}

尝试

for (JPanel jPanel : listaPaneles)
{
    pj.setPrintable(jPanel);
    pj.print();
}

其次,也许您需要将两个面板包装在另一个Printable容器中并仅打印这个容器。

Firstly, I think that you are not printing them all

instead of

for (int i = 0; i < 1; i++)
{
    pj.setPrintable(listaPaneles.get(i));
    pj.print();
}

try

for (JPanel jPanel : listaPaneles)
{
    pj.setPrintable(jPanel);
    pj.print();
}

Secondly, maybe you need to wrap your two panels inside another Printable container and print this one only.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文