如何在Java应用程序中打印JTable对象

3

问题:现在从数据库中获取数据并在嵌入在滚动窗格中的JTable对象“table”中显示数据后,我们如何创建一个打印作业,以便将显示的表格按A3纸张大小打印出来?

下面是从数据库中获取数据的代码:

try 
{
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost/newb","root","pass");
    Statement stat=con.createStatement();   
    ResultSet res=stat.executeQuery("select * from table where name = '"+name+"'");
    ResultSetMetaData rsmd = res.getMetaData();
    int colcount = rsmd.getColumnCount();
    Vector columns = new Vector(colcount);
        for(int i=3; i<=colcount; i++)
    {
        columns.add(rsmd.getColumnName(i));
    }
    Vector data = new Vector();
    Vector row;

    // Store row data
    while(res.next())
    {
        row = new Vector(colcount);
        for(int i=3; i<=colcount; i++)
        {
            row.add(res.getString(i));
        }
        data.add(row);
    }
    table = new JTable(data, columns);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    scrollPane.setViewportView(table);
}
catch(Exception ex)
{       
    System.out.println(ex);
}

我正在使用向量类从表格中获取数据。我们如何将显示的表格中的数据打印到纸上?


2
请参考这个答案 - Andrew Thompson
3个回答

3
你显然没有阅读你在上一个问题中提供的链接。
如何使用表格的打印部分:

打印

JTable为打印表格提供了简单的API。打印表格的最简单方法是调用没有参数的JTable.print:

try {
     if (! table.print()) {
         System.err.println("User cancelled printing");
     } 
 } catch (java.awt.print.PrinterException e) {
     System.err.format("Cannot print %s%n", e.getMessage()); 
 } 

调用普通 Swing 应用程序上的打印会弹出标准的打印对话框。(在无头应用程序上,表格将被简单地打印。)返回值指示用户是否继续执行打印作业还是取消它。JTable.print 可能会抛出 java.awt.print.PrinterException,这是一个已检查的异常;这就是为什么上面的例子使用 try ... catch 的原因。
JTable 提供了多个重载的 print 方法,具有各种选项。下面来自 TablePrintDemo.java 的代码显示如何定义页面标题:
MessageFormat header = new MessageFormat("第 {0,number,integer} 页");
try {
    table.print(JTable.PrintMode.FIT_WIDTH, header, null); 
} catch (java.awt.print.PrinterException e) {
     System.err.format("Cannot print %s%n", e.getMessage()); 
}

对于更复杂的打印应用程序,请使用JTable.getPrintable获取表格的Printable对象。有关Printable的更多信息,请参阅2D Graphics教程中的Printing课程。

1

只需使用JTable.print()方法即可。这里有一篇关于将JTable发送到打印机的文章,还有另一篇带有更多参数的文章


但是仅仅使用这个函数,它会工作吗?当我调用这个函数时,它会显示“未找到打印服务”。 - Roshan George

0

我希望这段代码对你有所帮助,尝试一下吧,它是用于在Java NetBeans中打印JTable的。

    private void btn_printActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
         MessageFormat header = new MessageFormat("Print Report");
        MessageFormat footer = new MessageFormat("Page{0,number,integer}");
    try {
        table_employee.print(JTable.PrintMode.FIT_WIDTH, header, footer);
    } catch (java.awt.print.PrinterAbortException e) {
    } catch (PrinterException ex) {
        Logger.getLogger(employee_info.class.getName()).log(Level.SEVERE, null, ex);
    }
}                                         

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接