import
java.awt.*;
import
java.awt.event.*;
import
java.awt.font.*;
import
java.awt.geom.*;
import
java.awt.print.*;
import
java.util.*;
import
javax.swing.*;
public
class
PrintTest
{
public
static
void
main(String[]
args)
{
JFrame
frame
=
new
PrintTestFrame();
frame.show();
}
}
class
PrintTestFrame
extends
JFrame
implements
ActionListener
{
public
PrintTestFrame()
{
setTitle("PrintTest");
setSize(300,
300);
addWindowListener(new
WindowAdapter()
{
public
void
windowClosing(WindowEvent
e)
{
System.exit(0);
}
}
);
Container
contentPane
=
getContentPane();
canvas
=
new
PrintPanel();
contentPane.add(canvas,
"Center");
JPanel
buttonPanel
=
new
JPanel();
printButton
=
new
JButton("Print");
buttonPanel.add(printButton);
printButton.addActionListener(this);
pageSetupButton
=
new
JButton("Page
setup");
buttonPanel.add(pageSetupButton);
pageSetupButton.addActionListener(this);
contentPane.add(buttonPanel,
"North");
}
public
void
actionPerformed(ActionEvent
event)
{
Object
source
=
event.getSource();
if
(source
==
printButton)
{
PrinterJob
printJob
=
PrinterJob.getPrinterJob();
if
(pageFormat
==
null)
pageFormat
=
printJob.defaultPage();
printJob.setPrintable(canvas,
pageFormat);
if
(printJob.printDialog())
{
try
{
printJob.print();
}
catch
(PrinterException
exception)
{
JOptionPane.showMessageDialog(this,
exception);
}
}
}
else
if
(source
==
pageSetupButton)
{
PrinterJob
printJob
=
PrinterJob.getPrinterJob();
if
(pageFormat
==
null)
pageFormat
=
printJob.defaultPage();
pageFormat
=
printJob.pageDialog(pageFormat);
}
}
private
JButton
printButton;
private
JButton
pageSetupButton;
private
PrintPanel
canvas;
private
PageFormat
pageFormat;
}
class
PrintPanel
extends
JPanel
implements
Printable
{
public
void
paintComponent(Graphics
g)
{
super.paintComponent(g);
Graphics2D
g2
=
(Graphics2D)g;
drawPage(g2);
}
public
int
print(Graphics
g,
PageFormat
pf,
int
page)
throws
PrinterException
{
if
(page
>=
1)
return
Printable.NO_SUCH_PAGE;
Graphics2D
g2
=
(Graphics2D)g;
g2.setPaint(Color.black);
g2.translate(pf.getImageableX(),
pf.getImageableY());
g2.draw(new
Rectangle2D.Double(0,
0,
pf.getImageableWidth(),
pf.getImageableHeight()));
drawPage(g2);
return
Printable.PAGE_EXISTS;
}
public
void
drawPage(Graphics2D
g2)
{
FontRenderContext
context
=
g2.getFontRenderContext();
Font
f
=
new
Font("Serif",
Font.PLAIN,
72);
GeneralPath
clipShape
=
new
GeneralPath();
TextLayout
layout
=
new
TextLayout("2426打印指南",
f,
context);
AffineTransform
transform
=
AffineTransform.getTranslateInstance(0,
72);
Shape
outline
=
layout.getOutline(transform);
clipShape.append(outline,
false);
layout
=
new
TextLayout("thank you",
f,
context);
transform
=
AffineTransform.getTranslateInstance(0,
144);
outline
=
layout.getOutline(transform);
clipShape.append(outline,
false);
g2.draw(clipShape);
g2.clip(clipShape);
final
int
NLINES
=50;
Point2D
p
=
new
Point2D.Double(0,
0);
for
(int
i
=
0;
i
<
NLINES;
i++)
{
double
x
=
(2
*
getWidth()
*
i)
/
NLINES;
double
y
=
(2
*
getHeight()
*
(NLINES
-
1
-
i))
/
NLINES;
Point2D
q
=
new
Point2D.Double(x,
y);
g2.draw(new
Line2D.Double(p,
q));
}
}
}