Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打印预览多页打印java_Java_Printing_Print Preview - Fatal编程技术网

打印预览多页打印java

打印预览多页打印java,java,printing,print-preview,Java,Printing,Print Preview,我有打印预览的代码 package printprew; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import java.awt.print.*; import javax.swing.border.*; public class PrintPrew extends JFrame

我有打印预览的代码

     package printprew;

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.awt.print.*;
    import javax.swing.border.*;

    public class PrintPrew extends JFrame implements ActionListener, ChangeListener, ItemListener {


    JButton print = new JButton("Print"),
    printThisPage = new JButton("Print Current Page"),
    cancel = new JButton("Close");
    Pageable pg = null;
    double scale = 1.0;
    JSlider slider = new JSlider();
    Page page[] = null;
    JComboBox jcb = new JComboBox();
    CardLayout cl = new CardLayout();
    JPanel p = new JPanel(cl);
    JButton back = new JButton("<<"), forward = new JButton(">>");

    public PrintPrew(Pageable pg) {
    super("Print Preview");
    this.pg = pg;
    createPreview();
    }
    public PrintPrew(final Printable pr, final PageFormat p) {
    super("Print Preview");
    this.pg = new Pageable() {
    public int getNumberOfPages() {
    Graphics g = new java.awt.image.BufferedImage(2,2,java.awt.image.BufferedImage.TYPE_INT_RGB).getGraphics();
    int n=0;
    try { while(pr.print(g, p, n) == pr.PAGE_EXISTS) n++; }
    catch(Exception ex) {ex.printStackTrace();}
    return n;
    }
    public PageFormat getPageFormat(int x) { return p; }
    public Printable getPrintable(int x) { return pr; }
    };
    createPreview();
    }
    private void createPreview() {
    page = new Page[pg.getNumberOfPages()];
    FlowLayout fl = new FlowLayout();
    PageFormat pf = pg.getPageFormat(0);
    Dimension size = new Dimension((int)pf.getPaper().getWidth(), (int)pf.getPaper().getHeight());
    if(pf.getOrientation() != PageFormat.PORTRAIT)
    size = new Dimension(size.height, size.width);
    JPanel temp = null;
    for(int i=0; i<page.length; i++) {
    jcb.addItem(""+(i+1));
    page[i] = new Page(i, size);
    p.add(""+(i+1), new JScrollPane(page[i]));
    }
    setTopPanel();
    this.getContentPane().add(p, "Center");
    Dimension d = this.getToolkit().getScreenSize();
    this.setSize(d.width,d.height-60);
    slider.setSize(this.getWidth()/2, slider.getPreferredSize().height);
    this.setVisible(true);
    page[jcb.getSelectedIndex()].refreshScale();
    }
    private void setTopPanel() {
    FlowLayout fl = new FlowLayout();
    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints(); 
    JPanel topPanel = new JPanel(gbl), temp = new JPanel(fl); slider.setBorder(new TitledBorder("Percentage Zoom"));
    slider.setPaintTicks(true);
    slider.setPaintLabels(true);
    slider.setMinimum(0);
    slider.setMaximum(500);
    slider.setValue(100);
    slider.setMinorTickSpacing(20);
    slider.setMajorTickSpacing(100);
    slider.addChangeListener(this);
    back.addActionListener(this);
    forward.addActionListener(this);
    back.setEnabled(false);
    forward.setEnabled(page.length > 1);
    gbc.gridx = 0;
    gbc.gridwidth = 1;
    gbl.setConstraints(slider, gbc); 
    topPanel.add(slider); 
    temp.add(back);
    temp.add(jcb);
    temp.add(forward);
    temp.add(cancel);
    temp.add(print);
    temp.add(printThisPage);
    gbc.gridx = 1;
    gbc.gridwidth = 2;
    gbl.setConstraints(temp, gbc);
    topPanel.add(temp);
    print.addActionListener(this);
    printThisPage.addActionListener(this);
    cancel.addActionListener(this);
    jcb.addItemListener(this);
    print.setMnemonic('P');
    cancel.setMnemonic('C');
    printThisPage.setMnemonic('U');
    this.getContentPane().add(topPanel, "North");
    }
    public void itemStateChanged(ItemEvent ie) {
    cl.show(p, (String)jcb.getSelectedItem());
    page[jcb.getSelectedIndex()].refreshScale();
    back.setEnabled(jcb.getSelectedIndex() == 0 ? false: true);
    forward.setEnabled(jcb.getSelectedIndex() == jcb.getItemCount()-1 ? false:true);
    this.validate();
    } public void actionPerformed(ActionEvent ae) {
    Object o = ae.getSource();
    if(o == print) {
    try {
    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.defaultPage(pg.getPageFormat(0));
    pj.setPageable(pg);
    if(pj.printDialog())
    pj.print();
    }
    catch(Exception ex) {
    JOptionPane.showMessageDialog(null,ex.toString(), "Error in Printing",1);
    }
    }
    else if(o == printThisPage)
    printCurrentPage();
    else if(o == back) {
    jcb.setSelectedIndex(jcb.getSelectedIndex() == 0 ? 0:jcb.getSelectedIndex()-1);
    if(jcb.getSelectedIndex() == 0)
    back.setEnabled(false);
    }
    else if(o == forward) {
    jcb.setSelectedIndex(jcb.getSelectedIndex() == jcb.getItemCount()-1 ? 0:jcb.getSelectedIndex()+1);
    if(jcb.getSelectedIndex() == jcb.getItemCount()-1)
    forward.setEnabled(false);
    }
    else if(o == cancel) this.dispose();
    } 
    public void printCurrentPage() {
    try {
    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.defaultPage(pg.getPageFormat(0));
    pj.setPrintable(new PsuedoPrintable());
    javax.print.attribute.HashPrintRequestAttributeSet pra = 
    new javax.print.attribute.HashPrintRequestAttributeSet();
    if(pj.printDialog(pra))
    pj.print(pra);
    }
    catch(Exception ex) {
    JOptionPane.showMessageDialog(null,ex.toString(), "Error in Printing", 1);
    }
    } 
    public void stateChanged(ChangeEvent ce) {
    double temp = (double)slider.getValue()/100.0;
    if(temp == scale)
    return;
    if(temp == 0) temp = 0.01;
    scale = temp;
    page[jcb.getSelectedIndex()].refreshScale();
    this.validate();
    }
    class Page extends JLabel {
    final int n;
    final PageFormat pf;
    java.awt.image.BufferedImage bi = null;
    Dimension size = null;
    public Page(int x, Dimension size) {
    this.size = size;
    bi = new java.awt.image.BufferedImage(size.width, size.height, java.awt.image.BufferedImage.TYPE_INT_RGB);
    n = x;
    pf = pg.getPageFormat(n);
    Graphics g = bi.getGraphics();
    Color c = g.getColor();
    g.setColor(Color.white);
    g.fillRect(0, 0, (int)pf.getWidth(), (int)pf.getHeight());
    g.setColor(c);
    try {
    g.clipRect(0, 0, (int)pf.getWidth(), (int)pf.getHeight());
    pg.getPrintable(n).print(g, pf, n);
    }
    catch(Exception ex) { }
    this.setIcon(new ImageIcon(bi));
    } 
    public void refreshScale() { 
    if(scale != 1.0)
    this.setIcon(new ImageIcon(bi.getScaledInstance((int)(size.width*scale), (int)(size.height*scale), bi.SCALE_FAST)));
    else 
    this.setIcon(new ImageIcon(bi));
    this.validate();
    }
    }
    class PsuedoPrintable implements Printable {
    public int print(Graphics g, PageFormat fmt, int index) {
    if(index > 0) return Printable.NO_SUCH_PAGE;
    int n = jcb.getSelectedIndex();
    try { return pg.getPrintable(n).print(g, fmt, n); } 
    catch(Exception ex) {}
    return Printable.PAGE_EXISTS;
    }

}
}
此表仅为测试我的printPreview类而创建。这张表有三页。但我的印刷品一直只显示最后一页。如果我更改页面进行预览,它将显示相同的最后一页,但更改页数。。。当我打印同样的问题时。每次打印表格的最后一页时,只需更改页数即可。如果我打印整个文档,它会在最后一页打印3次,并在按钮中使用不同的数字

需要改变什么((

    package printprew;

import javax.swing.*;
import java.awt.event.*;
import java.awt.print.*;
import java.text.*;

public class TestPr extends JFrame implements ActionListener{

    PrinterJob pj = PrinterJob.getPrinterJob();
javax.print.attribute.HashPrintRequestAttributeSet att = 
new javax.print.attribute.HashPrintRequestAttributeSet();
JEditorPane tp = null;
JTable tab = null;

public TestPr() {
super("Печать");
JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
sp.setBottomComponent(createTable()); 
java.awt.Dimension d = this.getToolkit().getScreenSize();
this.setSize(d.width/2, d.height);
this.getContentPane().add(sp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
this.setVisible(true);
sp.setDividerLocation(0.5);
this.validate();
}

private JPanel createTable() {
String val[][] = {{"т1", "тт1"}, {"т2","тт2"},{"т3","тт3"}, 
{"т4","тт4"}, {"т5","тт5"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},
{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},
{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},
        {"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т6","тт6"},
        {"т6","тт6"},{"т6","тт6"},{"т6","тт6"},{"т7","тт7"},{"т7","тт7"},
        {"т7","тт7"},{"т7","тт7"},{"т7","тт7"},{"т7","тт7"},{"т7","тт7"}
};
String title[] = {"стобл1_назв","столб2_назв"};
tab = new JTable(val,title);
tab.setRowHeight(25);
tab.setFont(new java.awt.Font("Times New Roman",java.awt.Font.BOLD,16));
JButton b = new JButton("Просмотр таблицы");
b.addActionListener(this);

JPanel p = new JPanel(new java.awt.BorderLayout()), top = new JPanel(new java.awt.FlowLayout());
top.add(b);
p.add(top, "North");
p.add(new JScrollPane(tab), "Center");
return p;
}
public void actionPerformed(ActionEvent ae) {
    PageFormat pf= pj.getPageFormat(att);
    pf.setOrientation(PageFormat.LANDSCAPE);
new PrintPrew(tab.getPrintable(javax.swing.JTable.PrintMode.FIT_WIDTH, 
new MessageFormat("Накладная"), new MessageFormat("{0}")),pf);
}
public static void main(String arg[]) {
new TestPr();
}


}