我可以使用下面的语句轻松打印JTable的内容。但是,这不适用于打印textarea组件的内容。是否有一种简单的方法来打印textarea组件的内容?我在网上看到了一些使用多个类的相当令人困惑的例子。但我正试图找到一种更简单的方法。
我在原始发布后24小时内添加了第二区代码。请注意,它可能会产生错误,但会产生错误“添加对打印(图形)的争论”。如何修改代码?
table.print(JTable.PrintMode.NORMAL, header, footer);
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);
}
}
});
答案 0 :(得分:1)
Google和JavaDocs是您的朋友
显示打印对话框的便捷打印方法,然后 以交互模式打印此JTextComponent,没有标题或 页脚文字。注意:此方法会阻止,直到打印完成。注意:在 无头模式,不会显示任何对话框。
此方法调用全功能打印方法来执行 印刷。
返回:
为true,除非用户取消打印
JTextArea#print(MessageFormat headerFormat, MessageFormat footerFormat)
显示打印对话框的便捷打印方法,然后 以指定的交互模式打印此JTextComponent 页眉和页脚文本。注意:此方法会阻止打印 完成。注意:在无头模式下,不会显示任何对话框。
此方法调用全功能打印方法来执行打印。
参数:
headerFormat - MessageFormat中的文本,用作 标题,或null为无标题
footerFormat - 文本,在 MessageFormat,用作页脚,或null为无页脚
返回: true,除非用户取消打印
......你可以自己看一下,发帖很长......
JTextArea#getPrintable(MessageFormat headerFormat, MessageFormat footerFormat)
返回用于打印此内容的Printable JTextComponent的。返回的Printable打印文档 在屏幕上除了重新格式化以适合纸张。归来了 Printable可以包装在另一个Printable中以便创建 复杂的报告和文件。返回的Printable共享 使用此JTextComponent的文档。这是责任 开发人员确保文档在此期间不会发生变异 使用可打印。文档时,打印行为未定义 在印刷过程中发生了变异。
页面页眉和页脚文本可以通过提供添加到输出中 MessageFormat参数。打印代码从中请求字符串 格式,提供可包含在内的单个项目 格式化字符串:表示当前页码的整数。
打印时返回的Printable格式化文档内容 适当的页面大小。正确的换行包装 所有页面的可成像宽度必须相同。看到 PageFormat.getImageableWidth()。
此方法是线程安全的,但大多数Swing方法都不是。 有关更多信息,请参阅如何使用线程。
返回的Printable可以打印在任何线程上。
这个实现返回Printable执行所有绘画 事件调度线程,无论它使用什么线程。
参数:
headerFormat - MessageFormat中的文本,用作 标题,或null为无标题
footerFormat - 文本,在 MessageFormat,用作页脚,或null为无页脚
返回:
用于打印此内容的Printable 的JTextComponent
对我来说效果很好......
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestPrint {
public static void main(String[] args) {
new TestPrint();
}
public TestPrint() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JTextArea ta = new JTextArea(20, 100);
try (FileReader reader = new FileReader(new File("C:/Script.txt"))) {
ta.read(reader, ta);
} catch (IOException ex) {
ex.printStackTrace();
}
JButton print = new JButton("Print");
print.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MessageFormat header = new MessageFormat("Star Wars IV A new Hope");
MessageFormat footer = new MessageFormat("Page {0}");
try {
ta.print(header, footer);
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
});
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(ta));
frame.add(print, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}