package view; import javax.swing.text.BoxView; import java.awt.Graphics; import java.awt.Rectangle; import javax.swing.text.Element; import javax.swing.text.View; public class PrintView extends BoxView { protected int firstOnPage = 0; protected int lastOnPage = 0; protected int pageIndex = 0; public PrintView(Element elem, View root, int w, int h) { super(elem, Y_AXIS); setParent(root); setSize(w, h); layout(w, h); } public boolean paintPage(Graphics g, int hPage, int pIndex) { if (pIndex > this.pageIndex) { firstOnPage = lastOnPage + 1; if (firstOnPage >= getViewCount()) { return false; } pageIndex = pIndex; } int yMin = getOffset(Y_AXIS, firstOnPage); int yMax = yMin + hPage; Rectangle rc = new Rectangle(); for (int k = firstOnPage; k < getViewCount(); k++) { rc.x = getOffset(X_AXIS, k); rc.y = getOffset(Y_AXIS, k); rc.width = getSpan(X_AXIS, k); rc.height = getSpan(Y_AXIS, k); if (rc.y+rc.height > yMax) { break; } lastOnPage = k; rc.y -= yMin; paintChild(g, rc, k); } return true; } }