【问题标题】:Printing 2 header lines from DataBase using MessageFormat to print a JTable?使用 MessageFormat 从数据库打印 2 个标题行以打印 JTable?
【发布时间】:2014-10-27 18:14:30
【问题描述】:

我的程序上有一个按钮,用于打印 JTable 以及其中显示的数据(其中填充了用户从数据库中搜索的数据)。我想在标题上打印 2 行:一行是组合框中所选项目的名称(这是有效的),另一行是学生的姓名(这个是无效的)。这是我的代码:

    MessageFormat header = new MessageFormat("Ficha Pedagógica - "+jComboBox1.getSelectedItem());

    MessageFormat footer = new MessageFormat("Página {0,number,integer}");

    try{
        jTable2.print(JTable.PrintMode.NORMAL, header, null);
    }
    catch(java.awt.print.PrinterException e){
        System.out.println("error");
    }

当我尝试对标题执行此操作时,它并没有换行,而是在第一行前面显示“/nAl...”:

MessageFormat header = new MessageFormat("Ficha Pedagógica - "+jComboBox1.getSelectedItem()+"\nNome do Aluno - "+jTextField1.getText());

另外,当我尝试使用 2 个标头时,我不能这样做,因为打印功能不允许这样做。那么,我怎样才能有 2 个标题行?

【问题讨论】:

  • 我没有看到任何尝试破坏代码中的行。为什么你认为它应该打破它?
  • 我忘了在这里添加它,因为它之前不起作用,所以我把它从我的代码中取出。但是我又试了一次,还是不行。关于为什么换行符不适用于标题的任何想法?

标签: java postgresql database-connection


【解决方案1】:

不幸的是,我认为没有办法做到这一点。 jTable 正在调用 AWT 函数来绘制页眉和页脚。它使用FontMetrics.getStringBounds() 测量页眉(和页脚)将占用多少空间,然后使用Graphics.drawString() 绘制它。不幸的是,这两种方法没有考虑换行符。

您可以通过从 JTable 中获取 Printable 对象并用您自己的实现包装它来做到这一点。但这并非小事。

【讨论】:

  • 所以没有简单的方法可以做到这一点?我明白了……好吧,我真的需要知道如何实现它,那么,我该怎么做呢?或者我在哪里可以学习如何做到这一点?请记住,我是初学者,所以,知道我在做什么每一步都会很好。
  • 看看this answer。在我看来,它不适合初学者水平,但你的意见可能会有所不同。
  • 我去看看。谢谢!如果我不能关注某些事情,我会在这里问。
  • 我试图实现它,但我得到了很多错误。找不到符号:私有最终 JTableHeader 标头;私有最终 TableColumnModel colModel; Rectangle2D hRect = null; Rectangle2D fRect = null;仿射变换 oldTrans;这是因为我没有导入就留下了一些东西吗?我不知道是什么导致了这个“找不到符号”错误...
  • 您需要就此提出一个新问题,解释背景,展示您实现的代码,以及您遇到的错误。您可以检查每个类的文档以查看您是否正确导入了它,并在发布问题之前尝试消除尽可能多的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多