📄 adminapplet.java
字号:
package admin;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.print.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Dimension;
public class AdminApplet extends JApplet implements Printable {
JTable ppTable;
JTableHeader tableHeader;
int [] subTableSplit = null;
boolean pageinfoCalculated=false;
int totalNumPages=0;
int prevPageIndex = 0;
int subPageIndex = 0;
int subTableSplitSize = 0;
double tableHeightOnFullPage, headerHeight;
double pageWidth, pageHeight;
int fontHeight, fontDesent;
double tableHeight, rowHeight;
public void init() {
final String[] headers = {"Item Number", "Summary", "Current High Bid", "Closing Date", "Number of Bids"};
final Object[][] data = {
{"40000", "19th Century Martin Guitar", "$4,000", "April 22, 1999", new Integer(12)},
{"40001", "18th Century Sundial", "$10,000", "April 20, 1999", new Integer(26)},
{"40002", "Colonel Colt, 1851 Presentation Pistol", "$25,000", "April 21, 1999", new Integer(150)},
{"40003", "Beaded Purse", "$7,000", "April 22, 1999", new Integer(30)}
};
TableModel dataModel = new AbstractTableModel() {
public int getColumnCount() { return headers.length; }
public int getRowCount() { return data.length;}
public Object getValueAt(int row, int col) {return data[row][col];}
public String getColumnName(int column) {return headers[column];}
public Class getColumnClass(int col) {return getValueAt(0,col).getClass();}
public boolean isCellEditable(int row, int col) {return (col==1);}
public void setValueAt(Object aValue, int row, int column) {
data[row][column] = aValue;
}
};
ppTable = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(ppTable);
scrollpane.setPreferredSize(new Dimension(500, 80));
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.CENTER,scrollpane);
JButton printButton= new JButton();
printButton.setText("print me!");
getContentPane().add(BorderLayout.SOUTH,printButton);
// for faster printing turn double buffering off
RepaintManager.currentManager(this).setDoubleBufferingEnabled(false);
printButton.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent evt) {
PrinterJob pj=PrinterJob.getPrinterJob();
pj.setPrintable(AdminApplet.this);
pj.printDialog();
try{
pj.print();
}catch (Exception PrintException) {}
}
});
setVisible(true);
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
Graphics2D g2=(Graphics2D)g;
if(!pageinfoCalculated) {
getPageInfo(g, pageFormat);
}
g2.setColor(Color.black);
if(pageIndex>=totalNumPages) {
return NO_SUCH_PAGE;
}
if (prevPageIndex != pageIndex) {
subPageIndex++;
if( subPageIndex == subTableSplitSize -1) {
subPageIndex=0;
}
}
g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
int rowIndex = pageIndex/ (subTableSplitSize -1);
printTablePart(g2, pageFormat, rowIndex, subPageIndex);
prevPageIndex= pageIndex;
return Printable.PAGE_EXISTS;
}
public void getPageInfo(Graphics g, PageFormat pageFormat) {
subTableSplit = null;
subTableSplitSize = 0;
subPageIndex = 0;
prevPageIndex = 0;
fontHeight=g.getFontMetrics().getHeight();
fontDesent=g.getFontMetrics().getDescent();
tableHeader = ppTable.getTableHeader();
double headerWidth = tableHeader.getWidth();
headerHeight = tableHeader.getHeight() + ppTable.getRowMargin();
pageHeight = pageFormat.getImageableHeight();
pageWidth = pageFormat.getImageableWidth();
double tableWidth = ppTable.getColumnModel().getTotalColumnWidth();
tableHeight = ppTable.getHeight();
rowHeight = ppTable.getRowHeight() + ppTable.getRowMargin();
tableHeightOnFullPage = (int)(pageHeight - headerHeight - fontHeight*2);
tableHeightOnFullPage = tableHeightOnFullPage/rowHeight * rowHeight;
TableColumnModel tableColumnModel = tableHeader.getColumnModel();
int columns = tableColumnModel.getColumnCount();
int columnMargin = tableColumnModel.getColumnMargin();
int [] temp = new int[columns];
int columnIndex = 0;
temp[0] = 0;
int columnWidth;
int length = 0;
subTableSplitSize = 0;
while ( columnIndex < columns ) {
columnWidth = tableColumnModel.getColumn(columnIndex).getWidth();
if ( length + columnWidth + columnMargin > pageWidth ) {
temp[subTableSplitSize+1] = temp[subTableSplitSize] + length;
length = columnWidth;
subTableSplitSize++;
}
else {
length += columnWidth + columnMargin;
}
columnIndex++;
} //while
if ( length > 0 ) { // if are more columns left, part page
temp[subTableSplitSize+1] = temp[subTableSplitSize] + length;
subTableSplitSize++;
}
subTableSplitSize++;
subTableSplit = new int[subTableSplitSize];
for ( int i=0; i < subTableSplitSize; i++ ) {
subTableSplit[i]= temp[i];
}
totalNumPages = (int)(tableHeight/tableHeightOnFullPage);
if ( tableHeight%tableHeightOnFullPage >= rowHeight ) { // at least 1 more row left
totalNumPages++;
}
totalNumPages *= (subTableSplitSize-1);
pageinfoCalculated = true;
}
public void printTablePart(Graphics2D g2, PageFormat pageFormat, int rowIndex, int columnIndex) {
String pageNumber = "Page: "+(rowIndex+1);
if ( subTableSplitSize > 1 ) {
pageNumber += "-" + (columnIndex+1);
}
int pageLeft = subTableSplit[columnIndex];
int pageRight = subTableSplit[columnIndex + 1];
int pageWidth = pageRight-pageLeft;
// page number message
g2.drawString(pageNumber, pageWidth/2-35, (int)(pageHeight - fontHeight));
double clipHeight = Math.min(tableHeightOnFullPage, tableHeight - rowIndex*tableHeightOnFullPage);
g2.translate(-subTableSplit[columnIndex], 0);
g2.setClip(pageLeft ,0, pageWidth, (int)headerHeight);
tableHeader.paint(g2); // draw the header on every page
g2.translate(0, headerHeight);
g2.translate(0, -tableHeightOnFullPage*rowIndex);
// cut table image and draw on the page
g2.setClip(pageLeft, (int)tableHeightOnFullPage*rowIndex, pageWidth, (int)clipHeight);
ppTable.paint(g2);
double pageTop = tableHeightOnFullPage*rowIndex - headerHeight;
double pageBottom = pageTop + clipHeight + headerHeight;
g2.drawRect(pageLeft, (int)pageTop, pageWidth, (int)(clipHeight+ headerHeight));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -