I create a Swing application with 2 JFrame
windows and I want to 1st frame as main page. I set print button in 1st frame to print 2nd frame.
How can I print the second frame with frame.setVisible(false);
? How can I solve it?
I put my code below:
package printuiwindow;
/**
*
* @author Saravanan Ponnusamy
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.print.*;
class PrintUIWindow implements Printable, ActionListener {
JFrame frameToPrint;
public int print(Graphics g, PageFormat pf, int page) throws
PrinterException {
if (page > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY()-55);
frameToPrint.print(g);
return PAGE_EXISTS;
}
public void actionPerformed(ActionEvent e) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
System.out.println(ex);
}
}
}
public PrintUIWindow(JFrame f) {
frameToPrint = f;
}
public static void main(String args[]) {
UIManager.put("swing.boldMetal", Boolean.FALSE);
JFrame f = new JFrame("Print UI Example");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
//Printing frame design start
JFrame frame = new JFrame("Print UI Example");
JLabel label11=new JLabel("Selling Bill",JLabel.CENTER);
JLabel label21=new JLabel("Customer Name :",JLabel.LEFT);
JLabel label31=new JLabel("Buying Date :",JLabel.LEFT);
JLabel label41=new JLabel("Book Buyed :",JLabel.LEFT);
JLabel label51=new JLabel("Number :",JLabel.LEFT);
JLabel label61=new JLabel("Total Price :",JLabel.LEFT);
label11.setFont(new Font("Courier New", Font.BOLD, 13));
label21.setFont(new Font("Courier New", Font.BOLD, 13));
label31.setFont(new Font("Courier New", Font.BOLD, 13));
label41.setFont(new Font("Courier New", Font.BOLD, 13));
label51.setFont(new Font("Courier New", Font.BOLD, 13));
label61.setFont(new Font("Courier New", Font.BOLD, 13));
JPanel panel1=new JPanel();
panel1.setLayout(new GridLayout(6,1));
panel1.add(label11);
panel1.add(label21);
panel1.add(label31);
panel1.add(label41);
panel1.add(label51);
panel1.add(label61);
frame.setSize(300,300);
frame.setLocationRelativeTo(null);
frame.add(panel1,BorderLayout.CENTER);
panel1.setBackground(Color.WHITE);
frame.setResizable(false);
frame.setVisible(true);
//printing frame design end
//first frame design start
JLabel label1=new JLabel("Selling Bill",JLabel.CENTER);
JLabel label2=new JLabel("Customer Name :",JLabel.LEFT);
JLabel label3=new JLabel("Buying Date :",JLabel.LEFT);
JLabel label4=new JLabel("Book Buyed :",JLabel.LEFT);
JLabel label5=new JLabel("Number :",JLabel.LEFT);
JLabel label6=new JLabel("Total Price :",JLabel.LEFT);
label1.setFont(new Font("Courier New", Font.BOLD, 13));
label2.setFont(new Font("Courier New", Font.BOLD, 13));
label3.setFont(new Font("Courier New", Font.BOLD, 13));
label4.setFont(new Font("Courier New", Font.BOLD, 13));
label5.setFont(new Font("Courier New", Font.BOLD, 13));
label6.setFont(new Font("Courier New", Font.BOLD, 13));
JButton printButton = new JButton("Print This Window");
//print button code
printButton.addActionListener(new PrintUIWindow(frame));
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(6,1));
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(label4);
panel.add(label5);
panel.add(label6);
f.setSize(300,300);
f.setLocationRelativeTo(null);
f.add(panel,BorderLayout.CENTER);
f.add(printButton,BorderLayout.SOUTH);
panel.setBackground(Color.WHITE);
f.setResizable(false);
f.setVisible(true);
}
}