【问题标题】:Printing JTable and other textfields in Java在 Java 中打印 JTable 和其他文本字段
【发布时间】:2016-09-16 09:20:33
【问题描述】:

我正在为我的项目工作开发一个 Java 桌面应用程序。我需要打印一张包含小计和总计字段的发票以及来自JTable 的表格数据。我可以打印表格,但不能在同一页面上。即 JTable 在第一页打印,小计在下一页打印。有没有办法在同一页上打印两个数据。我不想使用报告引擎。只需使用内置的 java 打印服务。请指导我。

根据需要打印格式:

下图显示了图形用户界面

下图显示了我到现在得到的报告。它的格式不正确。请帮忙

代码如下

        JLabel title = new JLabel();
        title.setText("Invoice");
        title.setBounds(300, 200, 80, 30);


        JTextField subTotal = new JTextField();
        subTotal.setText("Sub Total : Rs. " + SubTotal.getText());
        subTotal.setBounds(400, 200, 150, 30);


        MyPrintable prt = new MyPrintable();
        prt.addComponent(title);
        prt.addComponent(billTable); //billTable is the JTable
        prt.addComponent(subTotal);
        prt.printIt();

下面是 My Printable 类

class MyPrintable implements Printable
{
private ArrayList<JComponent> items;

public MyPrintable()
{
    items = new ArrayList<>();
}
@Override
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
    if(page > 0) return Printable.NO_SUCH_PAGE;
    Graphics2D g2 = (Graphics2D)g;
    g2.translate(pf.getImageableX(), pf.getImageableY());


    for(JComponent item : items)
    {
        item.setLayout(null);
      //  item.setBounds(500, 500, 200, 200);
        item.printAll(g);
        g2.translate(0, item.getHeight());
    }
    return Printable.PAGE_EXISTS;
}

public void printIt()
{
    PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();;
    PrinterJob job = PrinterJob.getPrinterJob();
    try
    {
        job.setPrintable(this);
        if(job.printDialog(attributes))
            job.print(attributes);
    }
    catch (PrinterException e)
    {
        JOptionPane.showMessageDialog(null, e);
    }
}

public void addComponent(JComponent component) { items.add(component); }
}

【问题讨论】:

  • 您是否尝试过创建一个包含您需要的所有员工的页面(面板)并进行打印?
  • @SergiyMedvynskyy 我已经编辑了这个问题。
  • 在不查看您的代码的情况下如何帮助您?请提供SSCCE,以便我(或其他人)可以帮助您。
  • @SergiyMedvynskyy 我已经添加了我的代码。谢谢回复。如果可能,请发送示例代码。

标签: java swing printing


【解决方案1】:

如果你想在你设置的坐标打印你所有的东西,你要么需要创建一个新面板,在这个面板中布置你要打印的所有组件,然后打印这个面板或者你需要翻译所有打印方法中的组件到正确的坐标。

第二种方式看起来像

public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
    if(page > 0) return Printable.NO_SUCH_PAGE;
    Graphics2D g2 = (Graphics2D)g;
    g2.translate(pf.getImageableX(), pf.getImageableY());


    for(JComponent item : items)
    {
        g2.translate(item.getX(), item.getY());
        item.printAll(g);
        g2.translate(-item.getX(), -item.getY()); // bring all back to default coordinates
    }
    return Printable.PAGE_EXISTS;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    相关资源
    最近更新 更多