Problem beim drucken eines JPanels

mergon

Grünschnabel
Also, ich brauch schon wieder Hilfe^^.

Ich versuch ein JPanel zu drucken, bin jetzt entlich mal so weit gekommen, dass ich mehrere Seiten (hier JPanels) drucken kann, teoretisch zumindest.

Allerdings sieht es in der Praxis so aus, mein Programm mir nur das erste JLabel ausdruckt, das ich in das JPanel geadded hab, das nacher im ViewportView drin hab [z. 126].


Wenn ich mir das JDialog mit allem drum und drann, wird mir das jeweilige JPanel mit allem was drin ist angezeigt.


Die Gui klasse (hier muss der Fehler drin sein):

Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class DruckenGUI extends JDialog{
	DruckenGUI(ArrayList a, int typ){
		
		Container cp = getContentPane();
		cp = new JDialog(Main.cp, true);
	    cp.setBounds(100, 100, 300, 500);
		JScrollPane sp = new JScrollPane();
		sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		
    	JLabel ueberschrift[];
    	
    	JPanel[] panel = null;
    	
	    JLabel[] name = new JLabel[a.size()];
	    JLabel[] strasse = new JLabel[a.size()];
	    JLabel[] ort = new JLabel[a.size()];
	    JLabel[] blz = new JLabel[a.size()];
	    JLabel[] ktnr = new JLabel[a.size()];
	    
	    int seiten=1;
	    int zaeler=0;
	    if(typ==0){
	    	
	    	int temp=a.size();
	    	while((seiten*12)<temp){
	    		seiten++;
	    		temp=temp-12;
	    	}
	    	ueberschrift = new JLabel[seiten];
	    	panel = new JPanel[seiten];
	    	for (int i=0; i<panel.length; i++){
	    		ueberschrift[i] = new JLabel("Objektübersicht");
	    		ueberschrift[i].setBounds(50, 50, 300, 20);
	    		ueberschrift[i].setBackground(new Color(255,255,255));
	    		                	
		    	panel[i] = new JPanel();
			    panel[i].setLayout(null);
			    panel[i].setBackground(new Color(255,255,255));
		    	panel[i].add(ueberschrift[i]);
	    	}
	    }
	    
	    
    	int j=0;
    	seiten=0;
	    for (int i=0; i<a.size(); i++){
	    	if(typ==0){
	    		VObjekt vo= (VObjekt) a.get(i);
	    		name[i] = new JLabel("Name: " +vo.getName());
	    		name[i].setBounds(50, (j*120)+90, 240, 20);
	    		name[i].setBackground(new Color(255,255,255));
		    	panel[seiten].add(name[i]);
		    	
		    	strasse[i] = new JLabel("Straße: " +vo.getStrasse());
		    	strasse[i].setBounds(50, (j*120)+110, 240, 20);
		    	strasse[i].setBackground(new Color(255,255,255));
		    	panel[seiten].add(strasse[i]);
		    	
		    	ort[i] = new JLabel("Ort: " +vo.getPlz()+" "+vo.getOrt());
		    	ort[i].setBounds(50, (j*120)+130, 240, 20);
		    	ort[i].setBackground(new Color(255,255,255));
		    	panel[seiten].add(ort[i]);
		    	
		    	blz[i] = new JLabel("BLZ: " +vo.getBlz());
		    	blz[i].setBounds(50, (j*120)+150, 240, 20);
		    	blz[i].setBackground(new Color(255,255,255));
		    	panel[seiten].add(blz[i]);
		    	
		    	ktnr[i] = new JLabel("Ktnr: " +vo.getKtnr());
		    	ktnr[i].setBounds(50, (j*120)+170, 240, 20);
		    	ktnr[i].setBackground(new Color(255,255,255));
		    	panel[seiten].add(ktnr[i]);
		    	i++;
		    	if(i<a.size()){
		    		vo= (VObjekt) a.get(i);
		    		name[i] = new JLabel("Name: " +vo.getName());
		    		name[i].setBounds(300, (j*120)+90, 240, 20);
		    		name[i].setBackground(new Color(255,255,255));
			    	panel[seiten].add(name[i]);
			    	
			    	strasse[i] = new JLabel("Straße: " +vo.getStrasse());
			    	strasse[i].setBounds(300, (j*120)+110, 240, 20);
			    	strasse[i].setBackground(new Color(255,255,255));
			    	panel[seiten].add(strasse[i]);
			    	
			    	ort[i] = new JLabel("Ort: " +vo.getPlz()+" "+vo.getOrt());
			    	ort[i].setBounds(300, (j*120)+130, 240, 20);
			    	ort[i].setBackground(new Color(255,255,255));
			    	panel[seiten].add(ort[i]);
			    	
			    	blz[i] = new JLabel("BLZ: " +vo.getBlz());
			    	blz[i].setBounds(300, (j*120)+150, 240, 20);
			    	blz[i].setBackground(new Color(255,255,255));
			    	panel[seiten].add(blz[i]);
			    	
			    	ktnr[i] = new JLabel("Ktnr: " +vo.getKtnr());
			    	ktnr[i].setBounds(300, (j*120)+170, 240, 20);
			    	ktnr[i].setBackground(new Color(255,255,255));
			    	panel[seiten].add(ktnr[i]);
			    	j++;
			    	zaeler=zaeler+2;
			    	if(zaeler==12){
			    		j=0;
			    		zaeler=0;
			    		seiten++;
			    	}
		    	}
		    	
	    	}
	    }
	   
	    sp.setViewportView(panel[0]);
		sp.getViewport().setOpaque(false);
		sp.setAutoscrolls(true);
	    cp.add("Center", sp);
	    
	    JButton printButton = new JButton("Print This Window");
	    printButton.addActionListener(new PrintUIWindow(panel));
	    cp.add("South", printButton);
	    System.out.println("Panels: "+panel.length);
	    cp.setVisible(true);
	}
}

Die Klasse zum drucken:

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;

public class PrintUIWindow implements Printable, ActionListener {

  JPanel[] frameToPrint;

  public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

	  if (page < frameToPrint.length) {
		  
		  Graphics2D g2d = (Graphics2D) g;
		  g2d.translate(pf.getImageableX(), pf.getImageableY());
		  
		  /* Now print the window and its visible contents */
		  frameToPrint[page].addNotify();
		  frameToPrint[page].printAll(g);
		  /* tell the caller that this page is part of the printed document */
		  return PAGE_EXISTS;
	  } else {
		  return NO_SUCH_PAGE;
	  }

	  
    
  }

  public void actionPerformed(ActionEvent e) {
	    	PrinterJob job = PrinterJob.getPrinterJob();
	    	job.setPrintable(this);
	    	boolean ok = job.printDialog();
	    	if (ok) {
	    		try {
	    			job.print();
	    		} catch (PrinterException ex) {
    	    /* The job did not successfully complete */
	    		}
	    	}
  }

  public PrintUIWindow(JPanel[] panel) {
    frameToPrint = panel;
  }

  public static void main(String args[]) {
    /*UIManager.put("swing.boldMetal", Boolean.FALSE);
    JFrame f = new JFrame("Print UI Example");
    
    JTextArea text = new JTextArea(50, 20);
    for (int i = 1; i <= 50; i++) {
      text.append("Line " + i + "\n");
    }
    JScrollPane pane = new JScrollPane(text);
    pane.setPreferredSize(new Dimension(250, 200));
    pane.setBounds(30, 0, 250, 250);
    JPanel pan = new JPanel();
    pan.setLayout(null);
    JLabel j = new JLabel("hallo");

    JLabel j2 = new JLabel("bla");
    j.setBounds(0, 0, 30, 20);
    j2.setBounds(0, 50, 30, 20);
    pan.add(j);
    pan.add(j2);
    pan.add(pane);
    f.add("Center", pan);
    JButton printButton = new JButton("Print This Window");
    printButton.addActionListener(new PrintUIWindow(pan));
    f.add("South", printButton);
    f.setVisible(true);*/
  }
}

Die Main Klasse:
Java:
import java.awt.Container;
import java.util.ArrayList;
import javax.swing.JFrame;

public class Main extends JFrame {
	static JFrame cp =null;
	Main(){
		cp = this;
	}
	public static void main(String[] args) {
		ArrayList ar = new ArrayList();
		for(int i=0; i<15; i++){
			VObjekt vo = new VObjekt();
			vo.setName("Name: " +i);
			vo.setStrasse("Strasse: " +i);
			vo.setPlz(45454);
			vo.setOrt("Ort: "+i);
			vo.setBlz("01234567");
			vo.setKtnr("0123456789");
			ar.add(vo);
		}
		DruckenGUI dg = new DruckenGUI(ar, 0);
	}
}

Hier noch eine Klasse die man benötigt, damit alles funktioniert (hier ist der Fehler auf jeden fall nicht drin):

Java:
public class VObjekt {

	int no_nr;
	String name="";
	String strasse;
	int plz;
	String ort;
	String blz;
	String ktnr;
	
	public VObjekt(){
	}

	public VObjekt(int no_nr, String strasse, int plz, String ort, String blz,
			String ktnr) {
		super();
		this.no_nr = no_nr;
		this.strasse = strasse;
		this.plz = plz;
		this.ort = ort;
		this.blz = blz;
		this.ktnr = ktnr;
	}

	public int getNo_nr() {
		return no_nr;
	}
	public void setNo_nr(int no_nr) {
		this.no_nr = no_nr;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getStrasse() {
		return strasse;
	}
	public void setStrasse(String strasse) {
		this.strasse = strasse;
	}
	public int getPlz() {
		return plz;
	}
	public void setPlz(int plz) {
		this.plz = plz;
	}
	public String getOrt() {
		return ort;
	}
	public void setOrt(String ort) {
		this.ort = ort;
	}
	public String getBlz() {
		return blz;
	}
	public void setBlz(String string) {
		this.blz = string;
	}
	public String getKtnr() {
		return ktnr;
	}
	public void setKtnr(String string) {
		this.ktnr = string;
	}
	public String toString(){
		return ("NR: " +no_nr +" | Anschrift: " +strasse +" / " +plz +" / " +ort +" | Bankverbindung: " +blz +" / " +ktnr);
	}
	public boolean isReady(){
		if (this.strasse.length()>1){
			if (this.plz > 999){
				if (this.ort.length()>1){
					if (this.blz.length()>1){
						if (this.ktnr.length()>1){ // alle wichtigen kriterien sind erfült
							return true;
						}
					}
				}
			}
		}
		return false;
	}
}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück