📄 editarea.java
字号:
/*************************************************************************************
* 类名: EditArea
*
* 功能: 此类的主要的功能为编辑器中“编辑区”对象类,此类通过继承扩展了JTextArea类,并且 ,此类
* 实现了Printable接口,通过实现Printable接口中的print方法来实现打印功能。并且通过自定义
* 的方法printArea来实现对print方法的封装调用。
*
**************************************************************************************/
package edit.com;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.awt.print.*;
class EditArea extends JTextArea
implements Printable
{
private String str;
private Font font;
private PrinterJob job;
private PageFormat format;
private double visiblePageWidth , visiblePageHeight;
private final static int PageX = 15 ;
private final static int PageY = 20;
private boolean isWrap = false;
private boolean isEditable = false;
public EditArea( int rows , int columns )
{
super( rows , columns );
str = "print test\n";
font = new Font( "Dialog" , Font.BOLD , 15 );
}
public void setString( String aStr )
{
str = aStr;
}
public void setTextFont( Font aFont )
{
font = aFont;
}
public void setWrapTrue()
{
isWrap = true;
}
public void setWrapFalse()
{
isWrap = false;
}
public boolean getWrapState()
{
return isWrap;
}
public void setIsEditTrue()
{
isEditable = true;
}
public void setIsEditFalse()
{
isEditable = false;
}
public boolean getIsEditable()
{
return isEditable;
}
public void printArea()
throws PrinterException {
job = PrinterJob.getPrinterJob();
format = job.defaultPage();
job.setPrintable( this , format );
visiblePageWidth = format.getImageableWidth();
visiblePageHeight = format.getImageableHeight();
if( job.printDialog() )
{
job.print();
}
}
//注意:在实现此方法时,设定只能打印一页,读者们可以自己设定打印的页数
public int print( Graphics g, PageFormat pf, int page )
throws PrinterException
{
int fontHeight = 0;
int stringWidth = 0;
int line = 0;
String s = null;
FontMetrics fm = null;
if( page > 1 )
{
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2 = ( Graphics2D )g;
g2.translate( ( int )pf.getImageableX() , ( int )pf.getImageableY() );
g2.setFont( font );
fm = getFontMetrics( font );
fontHeight = fm.getHeight();
try{
DataOutputStream osw = new DataOutputStream( new FileOutputStream( "$temp.$$p" ) );
osw.writeBytes( str );
osw.close();
} catch(IOException e){}
try{
BufferedReader br = new BufferedReader( new FileReader( "$temp.$$p" ) );
s = br.readLine();
while( s != null )
{
if( s.length() == 0 )
{
g2.drawString( " ", PageX, PageY + fontHeight * ( line++ ) );
}
else
{
stringWidth = fm.stringWidth( s );
if( stringWidth > visiblePageWidth )
{
String s1, s2;
int goBack = 0;
while( fm.stringWidth( s1 = s.substring( 0 , s.length() - goBack ) ) > visiblePageWidth )
{
goBack++;
}
s1 = s.substring( 0, s.length() - goBack );
s2 = s.substring( s.length() - goBack - 1 );
g2.drawString( s1, PageX, PageY + fontHeight * ( line++ ) );
g2.drawString( s2, PageX, PageY + fontHeight * ( line++ ) );
}
else
{
g2.drawString( s, PageX, PageY + fontHeight * ( line++ ) );
}
}
s = br.readLine();
}
br.close();
}catch( IOException i ){}
return Printable.PAGE_EXISTS;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -