Lanike71 Δημοσ. 31 Μαΐου 2017 Δημοσ. 31 Μαΐου 2017 (επεξεργασμένο) Καλησπέρα, λίγο τη βοήθειά σας. Έχω φτιάξει μία εφαρμογή η οποία κάνει το εξής : Διαβάζει κάποια csv τα οποία χρησιμεύουν ως βάση για να δημιουργηθούν εκτυπώσιμα αρχεία.Η διαδικασία βασίζεται σε 2 buttons που είναι Φόρτωση αρχείου και Εκτύπωση αρχείου.Επιλέγοντας το Φόρτωση αρχείου, δημιουργείται αυτόματα ένα array από εκτυπώσιμα έγγραφα, τα οποία δημιουργούνται με βάση των παρακάτω κώδικα που βρήκα ως παράδειγμα στο νετ : public class Program1 implements Printable, ActionListener { public int print(Graphics g, PageFormat pf, int page) throws PrinterException { if (page > 0) { /* We have only one page, and 'page' is zero-based */ return Printable.NO_SUCH_PAGE; } /* User (0,0) is typically outside the imageable area, so we must * translate by the X and Y values in the PageFormat to avoid clipping */ Graphics2D g2d = (Graphics2D)g; pf.setOrientation(PageFormat.PORTRAIT); g2d.translate(pf.getImageableX(), pf.getImageableY()); g2d.setFont(new Font("Arial",Font.PLAIN,11)); /* Now we perform our rendering */ for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) { g2d.drawString("●", i * 12 + 91, j * 12 + 5); } /* tell the caller that this page is part of the printed document */ return Printable.PAGE_EXISTS; } public void actionPerformed(ActionEvent e) { HashPrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); attr.add((Attribute) new MediaPrintableArea(82, 1, 105, 203, MediaPrintableArea.MM)); PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(this); // boolean ok = job.printDialog(); // if (ok) { try { job.print(attr); } catch (PrinterException ex) { /* The job did not successfully complete */ } // } } public static void main(String args[]) { UIManager.put("swing.boldMetal", Boolean.FALSE); JFrame f = new JFrame("Printing"); JPanel pnl = new JPanel(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); JButton printButton = new JButton("Εκτύπωση "); p1 = new Program1(); printButton.addActionListener(p1); // ΙΝΣΟΜΝΙΑ Εδώ δεν ακυρώνεται το p1 ; p2 = new Program1(); printButton.addActionListener(p2); f.add(pnl); pnl.add(printButton); f.pack(); f.setSize(300, 100); f.setVisible(true); } } Το πρόβλημα ξεκινάει όταν ξανακάνει κάποιος κάποια φόρτωση άλλου ,2ου αρχείου. Το 1ο αρχείο έχει ήδη σταλεί μέσα από τον actionlistener στον εκτυπωτή και περιμένει πότε θα πατηθεί το printButton για να εκτυπωθεί και αυτό μαζί με το 2ο αρχείο. Προσπάθησα να βρω μία έξυπνη λύση αλλά δε βλέπω να ακυρώνεται η 1η εργασία. Κάποια λύση; Επεξ/σία 31 Μαΐου 2017 από Lanike71
Aztec Δημοσ. 1 Ιουνίου 2017 Δημοσ. 1 Ιουνίου 2017 Γιατί να ακυρωθεί η πρώτη εργασία επειδή ο χρήστης ξαναπατήσε το φόρτωση άλλη μια φορά ? Επισης δεν βλέπω κανά κουμπί φόρτωση να σου πω την αλήθεια
Lanike71 Δημοσ. 1 Ιουνίου 2017 Μέλος Δημοσ. 1 Ιουνίου 2017 Γιατί να ακυρωθεί η πρώτη εργασία επειδή ο χρήστης ξαναπατήσε το φόρτωση άλλη μια φορά ? Επισης δεν βλέπω κανά κουμπί φόρτωση να σου πω την αλήθεια Δεν έχω προσθέσει το button Φόρτωση αρχείου επειδή κάνει εργασία που είναι ευνόητη και θα την πω τώρα : Με το κουμπί Φόρτωση, φορτώνεται ένα αρχείο που επιλέχθηκε και είναι τύπου .csv. Αυτόματα, εμφανίζεται στην οθόνη το περιεχόμενο του csv και στέλνονται τα περιεχόμενά του στο σημειο του κώδικα for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) {g2d.drawString("●", i * 12 + 91, j * 12 + 5); } για να δημιουργηθεί το εκτυπώσιμο. Έστω ότι αυτό είναι το file1.csv και το εκτυπώσιμο είναι 5 αντικείμενα τύπου program1, που έχω παραθέσει. Έστω ότι κάποιος μετανιώνει και δε θέλει να εκτυπώσει τα 5 αντικείμενα αυτά και φορτώνει το file2.csv το οποίο δημιουργεί έστω 3 αντικείμενα τύπου program1. Αν επιχειρήσει να εκτυπώσει τα 3 τελευταία αντικείμενα, θα εκτυπωθούν και τα 5 πρώτα που απλά φόρτωσε. Εν μέρει βρήκα λύση με ένα ενδιάμεσο button "Δημιουργία εκτυπώσιμου εγγράφου", αλλά μου φάνηκε φτηνή λύση και λέω μπας και βρεθεί κάτι με κώδικα.
Lanike71 Δημοσ. 1 Ιουνίου 2017 Μέλος Δημοσ. 1 Ιουνίου 2017 Εντάξει λύθηκε το θέμα και ήταν τόσο απλό...Αντέγραψα το περιεχόμενο της actionPerformed() σε νέα μέθοδο και έσβησα την actionPerformed(). Οπότε μπορώ να ενσωματώσω τη νέα μέθοδο σε όποιο αντικείμενο προς εκτύπωση θέλω.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα