首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打印标签Java,Loops(?)

打印标签Java,Loops(?)
EN

Stack Overflow用户
提问于 2016-08-09 12:58:23
回答 1查看 106关注 0票数 0

我正在尝试创建一个在列中打印数据的应用程序。我的问题是job.setPrintable多次运行..。这意味着文件完全错了..。

有人对此有什么想法吗?

也许你对我如何使这段代码更好(?).

谢谢你的进阶

例如,我的ArrayList中有10个索引.当我运行应用程序时,它将在我的文档中创建20列.其中10个完全是空的,只占了空间.

代码语言:javascript
运行
复制
private final int PAGE_WIDTH = Math.round(MediaSize.ISO.A4.getX(MediaSize.MM));
private final int PAGE_HEIGHT = Math.round(MediaSize.ISO.A4.getY(MediaSize.MM) / 8);
private PrinterJob job = PrinterJob.getPrinterJob();
private Graphics2D column;
private Font font = new Font("Serif", Font.BOLD, 9);

private int writeOnRow = 0;
private int pageRow = 0;
private int columnSpace = 4;
private int itemsInRow = 3;
private int itemCurrentRow = 0;

public Printer(final ArrayList<Customers> resultAsList) {
    resultAsList.remove(0);

    job.setPrintable(new Printable() {
        public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
            if (pageIndex > 0) { 
                return NO_SUCH_PAGE;
            }

            column = (Graphics2D)g;
            column.translate(pf.getImageableX(), pf.getImageableY());

            column.setFont(font);

            for (Customers c : resultAsList) {
                String line =
                        c.getName() + "\n" +
                                c.getAddress() + "\n" +
                                c.getPostcode() + " " + c.getCity();

                //DATA, COLUMN, ROW
                column.drawString(c.getName(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2);
                column.drawString(c.getAddress(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2);
                column.drawString(c.getPostcode() + " " + c.getCity(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2);


                if (itemCurrentRow == itemsInRow) {
                    pageRow += PAGE_HEIGHT;
                    itemCurrentRow = 0;
                    columnSpace = 4;
                    itemCurrentRow++;
                } else {
                    writeOnRow = pageRow;
                    columnSpace += PAGE_WIDTH;
                    itemCurrentRow++;
                }

                writeOnRow += pageRow;
                laps++;

            }
            return PAGE_EXISTS;
        }
    });

    boolean doPrint = job.printDialog();

    if (doPrint) {
        try {
            job.print();
        } catch (PrinterException ex) {
            System.out.println(ex);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-08-09 13:23:37

您的代码看起来不干净。它迟早会很难维持--实际上它已经存在了。

  • 使用所有这些整数值作为字段是很酷的,但如果将其设置为常量,即private static final字段,则会更好。
  • 避免创建包含多达3个参数的方法。这是一个迹象,表明它可以被分成更小的部分,如方法、类等。
  • 避免使用像columnSpace = 4;这样的神奇数字。这是什么4?考虑把它变成康斯特场。
  • 你不会像你那样吞下例外。这没有意义。要么处理它们,要么声明throws

看来您的循环可能是无效的。为了使您的代码更漂亮,我建议您阅读清洁代码。这会让事情变得更清楚。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38851442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档