【问题标题】:Sending JTextArea Component to the Printer将 JTextArea 组件发送到打印机
【发布时间】:2014-10-30 17:16:20
【问题描述】:

我已经工作了 12 个小时,试图将一个简单的 jtextarea 组件的内容发送到打印机。疯了吧。我按照先前代码中的建议查看了 JavaDocs,但坦率地说,该代码不起作用并读取错误。我非常沮丧,因为打印 JTable 的内容非常简单(大约 8 行代码),但由于某种原因,打印 jtextarea 的内容完全不同,而且涉及多个类并且在某些示例中超过 100 个更复杂代码行。我不明白为什么简单地打印 Java 组件的过程会如此复杂。

谁能告诉我为什么下面的代码会读取错误“添加参数以匹配打印(图形)”以及如何修复它,以便我可以将 textarea 组件发送到打印机并继续我的生活。

JButton btnNewButton_7 = new JButton("Print");
    btnNewButton_7.addActionListener(new ActionListener() {
    @Override
        public void actionPerformed(ActionEvent arg0) {  

        try{
            boolean complete = textArea_2.print();
            //The above line reads the error "Add argument to match print(Graphics)"
            if(complete){
                JOptionPane.showMessageDialog(null,  "Printjob Finished", "Report",
                        JOptionPane.INFORMATION_MESSAGE);
            }else{
                JOptionPane.showMessageDialog(null, "Printing", "Printer", JOptionPane.ERROR_MESSAGE);
                }
            }catch(PrinterException e){JOptionPane.showMessageDialog(null, e);
            }
        }

    });

【问题讨论】:

  • 从 JavaDocs 开始,JTextArea#print 仅适用于 Java 6+。你使用的是什么版本的 Java(顺便说一句,你的代码对我来说很好,Java 6、7 和 8)

标签: java printing jtextarea


【解决方案1】:

您可能想看看StandardPrint。您可以摆脱引用 WindowUtilities 的行

来自那个班级:

    JFrame jf = new JFrame("StandardPrint Test");
    final JTextArea area = new JTextArea();
    area.append("hello\n");
    for (int i = 0; i < 50; i++) {
        area.append("\n");
    }
    area.append("world\n");
    JScrollPane sp = new JScrollPane(area);
    jf.add(sp);
    JMenuBar bar = new JMenuBar();
    JMenu printMenu = new JMenu("Print");
    JMenuItem print = new JMenuItem("Print");
    printMenu.add(print);
    ActionListener al = new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            StandardPrint sp = new StandardPrint(area);
            sp.setTitle("Hello World");
            sp.setPrintPageNumber(true);
            sp.setPageNumberVAlignment(BOTTOM);
            sp.setPageNumberHAlignment(CENTER);
            System.out.println(sp.getNumberOfPages());
            Image im1 = preview(300,300, sp, sp.getPageFormat(0), 0);
            Image im2 = preview(300,300, sp, sp.getPageFormat(1), 1);
            JLabel l = new JLabel(new ImageIcon(im1));
            JOptionPane.showMessageDialog(null, l);
            l = new JLabel(new ImageIcon(im2));
            JOptionPane.showMessageDialog(null, l);
        }
    };
    print.addActionListener(al);
    jf.setJMenuBar(bar);
    bar.add(fm);
    bar.add(printMenu);
    jf.setBounds(100,100,400,400);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);
}

【讨论】:

  • 谢谢。但是为什么我发布的代码显示错误消息“添加参数以匹配打印(图形)”?
  • 这一行:“boolean complete = textArea_2.print();”签名是 JTextArea.print(Graphics),其中 Graphics 对象来自打印机,而不是屏幕
  • 对不起,我不明白你在说什么。我在网络上看到了许多成功使用 textarea.print() 而不包含参数的程序示例。但它为我的程序读取了一个错误。
  • @Daron 你使用的是什么版本的 Java?
【解决方案2】:

感谢 MadProgrammer 的所有帮助和耐心。我刚刚弄清楚我原来的程序有什么问题。这很简单。我正在使用 java.awt 创建 TextArea 组件......但是,我用来打印的方法显然只与 javax.swing 兼容!现在我的程序完美运行,这真的是一个很大的解脱,因为我真的很困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多