2024年4月27日发(作者:)
猪哥解答:
我这里有以前收藏的代码,两个类实现了简易的文本打印机的功能,包括预览。
简单跟你说一下。
1、主体类,也是入口类,里面有main方法可以直接在Eclipse
中调试运行,他实现了从本地磁盘读取文本类文件打印以及打印预览的功能,其
中File动作按钮中的PrintPreviw就是打印预览功能,你可以运行看看。
2、打印预览类,这是专门为预览打印设计的类,通过他的构造
方法可以构造出一个预览类,PrinterDemo中的预览功能就是调用了这个类。
两个类的源码:
【】的源码:
import Layout;
import ;
import ner;
import ion;
import ;
import ;
import cs;
import cs2D;
import t;
import Event;
import nt;
import Adapter;
import Event;
import rmat;
import ble;
import rException;
import rJob;
import edReader;
import ;
import ader;
import ption;
import ;
import ctAction;
import nent;
import hooser;
import ;
import ;
import ar;
import lPane;
import oke;
public class PrinterDemo extends JFrame{
private static final long serialVersionUID = 1L;
private PageFormat pageFormat;
private FilePageRenderer pageRenderer;
private String title;
public PrinterDemo(){
super();
init();
PrinterJob pj = nterJob();
pageFormat = tPage();
setVisible(true);
}
protected void init()
{
setSize(350, 300);
center();
Container content = getContentPane();
out(new BorderLayout());
JMenuBar mb = new JMenuBar();
JMenu file = new JMenu("File", true);
(new
FileOpenAction()).setAccelerator(Stroke(_O
,_MASK));
(new
FilePrintPreviwAction()).setAccelerator(Stroke(KeyEve
_V, _MASK));
(new
FilePrintAction()).setAccelerator(Stroke(_
P,_MASK));
(new
FilePageSetupAction()).setAccelerator(Stroke(KeyEvent
.VK_P, _MASK| _MASK));
arator();
(new
FileQuitAction()).setAccelerator(Stroke(_Q
,
_MASK));
(file);
JMenu page = new JMenu("Page", true);
(new PageNextPageAction())
.setAccelerator(Stroke(_PAGE
_DOWN, 0));
(new PagePreviousPageAction())
.setAccelerator(Stroke(_PAGE
_UP, 0));
(page);
setJMenuBar(mb);
getContentPane().setLayout(new BorderLayout());
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
(0);
}
});
}
protected void center()
{
Dimension screenSize =
aultToolkit().getScreenSize();
Dimension frameSize = getSize();
int x = ( - ) / 2;
int y = ( - ) / 2;
setLocation(x, y);
}
public void showTitle()
{
int currentPage = rentPage() + 1;
int numPages = Pages();
setTitle(title + " - page " + currentPage + " of " + numPages);
}
public class FileOpenAction extends AbstractAction
{
private static final long serialVersionUID = 1L;
public FileOpenAction()
{
super("");
}
public void actionPerformed(ActionEvent ae)
{
// Pop up a file dialog.
JFileChooser fc = new JFileChooser(".");
int result = enDialog();
if (result != 0)
{
return;
}
f = ectedFile();
if (f == null)
{
return;
}
// Load the specified file.
try
{
pageRenderer = new FilePageRenderer(f, pageFormat);
title = "[" + e() + "]";
showTitle();
JScrollPane jsp = new JScrollPane(pageRenderer);
getContentPane().removeAll();
getContentPane().add(jsp, );
validate();
} catch (ption ioe)
{
n(ioe);
}
}
}
public static void main(String[] args){
new PrinterDemo();
}
public class FilePrintPreviwAction extends AbstractAction{
private static final long serialVersionUID = 1L;
public FilePrintPreviwAction(){
super("PrintPreviw");
}
public void actionPerformed(ActionEvent ae){
new
PrintPreview(pageRenderer,"PrintPreviw",entation());
}
}
public class FilePrintAction extends AbstractAction{
private static final long serialVersionUID = 1L;
public FilePrintAction(){
super("Print");
}
public void actionPerformed(ActionEvent ae){
PrinterJob pj = nterJob();
ntable(pageRenderer, pageFormat);
if (ialog()){
try{
();
} catch (PrinterException e){
n(e);
}
}
}
}
public class FilePageSetupAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public FilePageSetupAction(){
super("");
}
public void actionPerformed(ActionEvent ae){
PrinterJob pj = nterJob();
pageFormat = alog(pageFormat);
if (pageRenderer != null){
it(pageFormat);
showTitle();
}
}
}
public class FileQuitAction extends AbstractAction{
private static final long serialVersionUID = 1L;
public FileQuitAction(){
super("Quit");
}
public void actionPerformed(ActionEvent ae){
(0);
}
}
public class PageNextPageAction extends AbstractAction{
private static final long serialVersionUID = 1L;
public PageNextPageAction(){
super("Next page");
}
public void actionPerformed(ActionEvent ae){
if (pageRenderer != null)
ge();
showTitle();
}
}
public class PagePreviousPageAction extends AbstractAction{
private static final long serialVersionUID = 1L;
public PagePreviousPageAction(){
super("Previous page");
}
public void actionPerformed(ActionEvent ae){
if (pageRenderer != null)
usPage();
showTitle();
}
}
class FilePageRenderer extends JComponent implements Printable{
private static final long serialVersionUID = 1L;
private int currentPageIndex;
private Vector lineVector;
private Vector pageVector;
private Font font;
private int fontSize;
private Dimension preferredSize;
public FilePageRenderer(File file, PageFormat pageFormat)
throws IOException{
fontSize = 12;
font = new Font("Serif", , fontSize);
BufferedReader in = new BufferedReader(new
FileReader(file));
String line;
lineVector = new Vector();
while ((line = ne()) != null)
ment(line);
();
pageInit(pageFormat);
}
public void pageInit(PageFormat pageFormat){
currentPageIndex = 0;
pageVector = new Vector();
float y = fontSize;
Vector page = new Vector();
for (int i = 0; i < (); i++)
{
String line = (String) tAt(i);
ment(line);
y += fontSize;
if (y + fontSize * 2 > geableHeight())
{
y = 0;
ment(page);
page = new Vector();
}
}
if (() > 0)
ment(page);
preferredSize = new Dimension((int)
geableWidth(),
(int)
geableHeight());
repaint();
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
gle2D r = new
(0,
0,
,
);
nt();
(r);
Vector page = (Vector)
tAt(currentPageIndex);
t(font);
nt();
float x = 0;
float y = fontSize;
for (int i = 0; i < (); i++){
String line = (String) tAt(i);
if (() > 0)
ring(line, (int) x, (int) y);
y += fontSize;
}
}
public int print(Graphics g, PageFormat pageFormat, int
pageIndex){
if (pageIndex >= ())
return NO_SUCH_PAGE;
int savedPage = currentPageIndex;
currentPageIndex = pageIndex;
Graphics2D g2 = (Graphics2D) g;
ate(geableX(),
geableY());
paint(g2);
currentPageIndex = savedPage;
return PAGE_EXISTS;
}
public Dimension getPreferredSize(){
return preferredSize;
}
public int getCurrentPage(){
return currentPageIndex;
}
public int getNumPages(){
return ();
}
public void nextPage() {
if (currentPageIndex < () - 1)
currentPageIndex++;
repaint();
}
public void previousPage(){
if (currentPageIndex > 0)
currentPageIndex--;
repaint();
}
}
}
【】的源码:
import Layout;
import ;
import ent;
import ;
import ion;
import cs;
import ;
import ;
import Event;
import Listener;
import edImage;
import rmat;
import ble;
import rException;
import rJob;
import con;
import n;
import Box;
import ;
import ;
import lPane;
import ar;
import order;
public class PrintPreview extends JFrame
{
private static final long serialVersionUID = 1L;
protected int m_wPage;
protected int m_hPage;
protected int m_orientation;
protected Printable m_target;
protected JComboBox m_cbScale;
protected PreviewContainer m_preview;
public PrintPreview(Printable target)
{
this(target, "Print Preview ", IT);
}
public PrintPreview(Printable target, String title, int orientation)
{
super(title);
setSize(600, 400);
getContentPane().setLayout(new BorderLayout());
m_target = target;
m_orientation = orientation;
JToolBar tb = new JToolBar();
JButton bt = new JButton("Print ", new ImageIcon(" "));
ActionListener lst = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
PrinterJob prnJob = nterJob();
PageFormat pageFormat = tPage();
entation(m_orientation);
ntable(m_target, pageFormat);
if (!ialog())
return;
setCursor(definedCursor(_CURSOR));
();
setCursor(definedCursor(T_CURSOR));
dispose();
} catch (PrinterException ex)
{
tackTrace();
n("Printing error: " +
ng());
}
}
};
ionListener(lst);
gnmentY(0.5f);
gin(new Insets(4, 6, 4, 6));
(bt);
bt = new JButton("Close ");
lst = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
dispose();
}
};
ionListener(lst);
gnmentY(0.5f);
gin(new Insets(2, 6, 2, 6));
(bt);
String[] scales = { "10%", "25%", "50%", "100%" };
m_cbScale = new JComboBox(scales);
lst = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String str = m_ectedItem().toString();
if (th("%"))
str = ing(0, () - 1);
str = ();
int scale = 0;
try
{
scale = nt(str);
} catch (NumberFormatException ex)
{
return;
}
int w = (int) (m_wPage * scale / 100);
int h = (int) (m_hPage * scale / 100);
Component[] comps = m_ponents();
for (int k = 0; k < ; k++)
{
if (!(comps[k] instanceof PagePreview))
continue;
PagePreview pp = (PagePreview) comps[k];
ledSize(w, h);
}
m_ut();
m_ent().getParent().validate();
}
};
m_ionListener(lst);
m_imumSize(m_ferredSize());
m_table(true);
arator();
(m_cbScale);
getContentPane().add(tb, );
m_preview = new PreviewContainer();
PrinterJob prnJob = nterJob();
PageFormat pageFormat = tPage();
entation(m_orientation);
if (ght() == 0 || th() == 0)
{
n("Unable to determine default
page size ");
return;
}
m_wPage = (int) (th());
m_hPage = (int) (ght());
int scale = 10;
int w = (int) (m_wPage * scale / 100);
int h = (int) (m_hPage * scale / 100);
int pageIndex = 0;
try
{
while (true)
{
BufferedImage img = new BufferedImage(m_wPage, m_hPage,
_INT_RGB);
Graphics g = phics();
or();
ct(0, 0, m_wPage, m_hPage);
if ((g, pageFormat, pageIndex) !=
_EXISTS)
break;
PagePreview pp = new PagePreview(w, h, img);
m_(pp);
pageIndex++;
}
} catch (PrinterException e)
{
tackTrace();
n("Printing error: " + ng());
}
JScrollPane ps = new JScrollPane(m_preview);
getContentPane().add(ps, );
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
class PreviewContainer extends JPanel
{
private static final long serialVersionUID = 1L;
protected int H_GAP = 16;
protected int V_GAP = 10;
public Dimension getPreferredSize()
{
int n = getComponentCount();
if (n == 0)
return new Dimension(H_GAP, V_GAP);
Component comp = getComponent(0);
Dimension dc = ferredSize();
int w = ;
int h = ;
Dimension dp = getParent().getSize();
int nCol = (( - H_GAP) / (w + H_GAP), 1);
int nRow = n / nCol;
if (nRow * nCol < n)
nRow++;
int ww = nCol * (w + H_GAP) + H_GAP;
int hh = nRow * (h + V_GAP) + V_GAP;
Insets ins = getInsets();
return new Dimension(ww + + , hh +
+ );
}
public Dimension getMaximumSize()
{
return getPreferredSize();
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
public void doLayout()
{
Insets ins = getInsets();
int x = + H_GAP;
int y = + V_GAP;
int n = getComponentCount();
if (n == 0)
return;
Component comp = getComponent(0);
Dimension dc = ferredSize();
int w = ;
int h = ;
Dimension dp = getParent().getSize();
int nCol = (( - H_GAP) / (w + H_GAP), 1);
int nRow = n / nCol;
if (nRow * nCol < n)
nRow++;
int index = 0;
for (int k = 0; k < nRow; k++)
{
for (int m = 0; m < nCol; m++)
{
if (index >= n)
return;
comp = getComponent(index++);
nds(x, y, w, h);
x += w + H_GAP;
}
y += h + V_GAP;
x = + H_GAP;
}
}
}
class PagePreview extends JPanel
{
private static final long serialVersionUID = 1L;
protected int m_w;
protected int m_h;
protected Image m_source;
protected Image m_img;
public PagePreview(int w, int h, Image source)
{
m_w = w;
m_h = h;
m_source = source;
m_img = m_ledInstance(m_w, m_h,
_SMOOTH);
m_();
setBackground();
setBorder(new MatteBorder(1, 1, 2, 2, ));
}
public void setScaledSize(int w, int h)
{
m_w = w;
m_h = h;
m_img = m_ledInstance(m_w, m_h,
_SMOOTH);
repaint();
}
public Dimension getPreferredSize()
{
Insets ins = getInsets();
return new Dimension(m_w + + , m_h +
+ );
}
public Dimension getMaximumSize()
{
return getPreferredSize();
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
public void paint(Graphics g)
{
or(getBackground());
ct(0, 0, getWidth(), getHeight());
age(m_img, 0, 0, this);
paintBorder(g);
}
}
}
两个类放在同一个包下。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1714226748a2405943.html
评论列表(0条)