importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.Dimension;
importjava.awt.Event;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.KeyEvent;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.print.PageFormat;
importjava.awt.print.Printable;
importjava.awt.print.PrinterException;
importjava.awt.print.PrinterJob;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importjava.util.Vector;
importjavax.swing.AbstractAction;
importjavax.swing.JComponent;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JScrollPane;
importjavax.swing.KeyStroke;
publicclassFilePrinterextendsJFrame{
privatePageFormatpageFormat;
privateFilePageRendererpageRenderer;
privateStringtitle;
publicFilePrinter(){
super();
init();
PrinterJobpj=PrinterJob.getPrinterJob();
pageFormat=pj.defaultPage();
setVisible(true);
}
protectedvoidinit(){
setSize(350,300);
center();
Containercontent=getContentPane();
content.setLayout(newBorderLayout());
//Addthemenubar.
JMenuBarmb=newJMenuBar();
JMenufile=newJMenu("File",true);
file.add(newFileOpenAction()).setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_O,Event.CTRL_MASK));
file.add(newFilePrintAction()).setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_P,Event.CTRL_MASK));
file.add(newFilePageSetupAction()).setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_P,Event.CTRL_MASK
|Event.SHIFT_MASK));
file.addSeparator();
file.add(newFileQuitAction()).setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_Q,Event.CTRL_MASK));
mb.add(file);
JMenupage=newJMenu("Page",true);
page.add(newPageNextPageAction()).setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN,0));
page.add(newPagePreviousPageAction()).setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP,0));
mb.add(page);
setJMenuBar(mb);
getContentPane().setLayout(newBorderLayout());
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
}
protectedvoidcenter(){
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=getSize();
intx=(screenSize.width-frameSize.width)/2;
inty=(screenSize.height-frameSize.height)/2;
setLocation(x,y);
}
publicvoidshowTitle(){
intcurrentPage=pageRenderer.getCurrentPage()+1;
intnumPages=pageRenderer.getNumPages();
setTitle(title+"-page"+currentPage+"of"+numPages);
}
publicclassFileOpenActionextendsAbstractAction{
publicFileOpenAction(){
super("Open...");
}
publicvoidactionPerformed(ActionEventae){
//Popupafiledialog.
JFileChooserfc=newJFileChooser(".");
intresult=fc.showOpenDialog(FilePrinter.this);
if(result!=0){
return;
}
java.io.Filef=fc.getSelectedFile();
if(f==null){
return;
}
//Loadthespecifiedfile.
try{
pageRenderer=newFilePageRenderer(f,pageFormat);
title="["+f.getName()+"]";
showTitle();
JScrollPanejsp=newJScrollPane(pageRenderer);
getContentPane().removeAll();
getContentPane().add(jsp,BorderLayout.CENTER);
validate();
}catch(java.io.IOExceptionioe){
System.out.println(ioe);
}
}
}
publicstaticvoidmain(String[]args){
newFilePrinter();
}
publicclassFilePrintActionextendsAbstractAction{
publicFilePrintAction(){
super("Print");
}
publicvoidactionPerformed(ActionEventae){
PrinterJobpj=PrinterJob.getPrinterJob();
pj.setPrintable(pageRenderer,pageFormat);
if(pj.printDialog()){
try{
pj.print();
}catch(PrinterExceptione){
System.out.println(e);
}
}
}
}
publicclassFilePageSetupActionextendsAbstractAction{
publicFilePageSetupAction(){
super("Pagesetup...");
}
publicvoidactionPerformed(ActionEventae){
PrinterJobpj=PrinterJob.getPrinterJob();
pageFormat=pj.pageDialog(pageFormat);
if(pageRenderer!=null){
pageRenderer.pageInit(pageFormat);
showTitle();
}
}
}
publicclassFileQuitActionextendsAbstractAction{
publicFileQuitAction(){
super("Quit");
}
publicvoidactionPerformed(ActionEventae){
System.exit(0);
}
}
publicclassPageNextPageActionextendsAbstractAction{
publicPageNextPageAction(){
super("Nextpage");
}
publicvoidactionPerformed(ActionEventae){
if(pageRenderer!=null)
pageRenderer.nextPage();
showTitle();
}
}
publicclassPagePreviousPageActionextendsAbstractAction{
publicPagePreviousPageAction(){
super("Previouspage");
}
publicvoidactionPerformed(ActionEventae){
if(pageRenderer!=null)
pageRenderer.previousPage();
showTitle();
}
}
classFilePageRendererextendsJComponentimplementsPrintable{
privateintcurrentPageIndex;
privateVectorlineVector;
privateVectorpageVector;
privateFontfont;
privateintfontSize;
privateDimensionpreferredSize;
publicFilePageRenderer(Filefile,PageFormatpageFormat)
throwsIOException{
fontSize=12;
font=newFont("Serif",Font.PLAIN,fontSize);
BufferedReaderin=newBufferedReader(newFileReader(file));
Stringline;
lineVector=newVector();
while((line=in.readLine())!=null)
lineVector.addElement(line);
in.close();
pageInit(pageFormat);
}
publicvoidpageInit(PageFormatpageFormat){
currentPageIndex=0;
pageVector=newVector();
floaty=fontSize;
Vectorpage=newVector();
for(inti=0;i<lineVector.size();i++){
Stringline=(String)lineVector.elementAt(i);
page.addElement(line);
y+=fontSize;
if(y+fontSize*2>pageFormat.getImageableHeight()){
y=0;
pageVector.addElement(page);
page=newVector();
}
}
if(page.size()>0)
pageVector.addElement(page);
preferredSize=newDimension((int)pageFormat.getImageableWidth(),
(int)pageFormat.getImageableHeight());
repaint();
}
publicvoidpaintComponent(Graphicsg){
Graphics2Dg2=(Graphics2D)g;
java.awt.geom.Rectangle2Dr=newjava.awt.geom.Rectangle2D.Float(0,0,
preferredSize.width,preferredSize.height);
g2.setPaint(Color.white);
g2.fill(r);
Vectorpage=(Vector)pageVector.elementAt(currentPageIndex);
g2.setFont(font);
g2.setPaint(Color.black);
floatx=0;
floaty=fontSize;
for(inti=0;i<page.size();i++){
Stringline=(String)page.elementAt(i);
if(line.length()>0)
g2.drawString(line,(int)x,(int)y);
y+=fontSize;
}
}
publicintprint(Graphicsg,PageFormatpageFormat,intpageIndex){
if(pageIndex>=pageVector.size())
returnNO_SUCH_PAGE;
intsavedPage=currentPageIndex;
currentPageIndex=pageIndex;
Graphics2Dg2=(Graphics2D)g;
g2.translate(pageFormat.getImageableX(),pageFormat.getImageableY());
paint(g2);
currentPageIndex=savedPage;
returnPAGE_EXISTS;
}
publicDimensiongetPreferredSize(){
returnpreferredSize;
}
publicintgetCurrentPage(){
returncurrentPageIndex;
}
publicintgetNumPages(){
returnpageVector.size();
}
publicvoidnextPage(){
if(currentPageIndex<pageVector.size()-1)
currentPageIndex++;
repaint();
}
publicvoidpreviousPage(){
if(currentPageIndex>0)
currentPageIndex--;
repaint();
}
}
}
Java 打印的文本文件和打印预览
最新推荐文章于 2024-12-05 14:28:59 发布
1259

被折叠的 条评论
为什么被折叠?



