sxhs2008 2011-01-24 10:03
浏览 272
已采纳

如何用java实现,1.白色的结账单,2.如何把结账单打印出来,如何写?

如何用java实现,1.白色的提示结账面(就是图片中间的白色图片跟上面显示的结账单),2.用什么方法如何打印出来结账单

我上传了附件,有会的帮忙讲解下,或是写个代码带个注释!

 


问题补充
第一个问题知道了,第二个问题有谁知道?就是打印结账单如何打印,写个简单的出来,最好加个注释,非常感谢!
问题补充
太强悍了!!!
  • 写回答

3条回答 默认 最新

  • fuckcdn 2011-01-24 10:03
    关注
    public class PrintPreviewDialog extends JDialog implements ActionListener {
        /**
         * 
         */
        private static final long serialVersionUID = -7320342468005550954L;
        private JButton nextButton = new JButton("Next");
        private JButton previousButton = new JButton("Previous");
        private JButton closeButton = new JButton("Close");
        private JPanel buttonPanel = new JPanel();
        private PreviewCanvas canvas;
    
        public PrintPreviewDialog(Frame parent, String title, boolean modal,
                PrintTest pt, String str) {
            super(parent, title, modal);
            canvas = new PreviewCanvas(pt, str);
            setLayout();
        }
    
        private void setLayout() {
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add(canvas, BorderLayout.CENTER);
    
            nextButton.setMnemonic('N');
            nextButton.addActionListener(this);
            buttonPanel.add(nextButton);
            previousButton.setMnemonic('N');
            previousButton.addActionListener(this);
            buttonPanel.add(previousButton);
            closeButton.setMnemonic('N');
            closeButton.addActionListener(this);
            buttonPanel.add(closeButton);
            this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
            this.setBounds((int) ((SystemProperties.SCREEN_WIDTH - 400) / 2),
                    (int) ((SystemProperties.SCREEN_HEIGHT - 400) / 2), 400, 400);
        }
    
        public void actionPerformed(ActionEvent evt) {
            Object src = evt.getSource();
            if (src == nextButton)
                nextAction();
            else if (src == previousButton)
                previousAction();
            else if (src == closeButton)
                closeAction();
        }
    
        private void closeAction() {
            this.setVisible(false);
            this.dispose();
        }
    
        private void nextAction() {
            canvas.viewPage(1);
        }
    
        private void previousAction() {
            canvas.viewPage(-1);
        }
    
        class PreviewCanvas extends JPanel {
            private String printStr;
            private int currentPage = 0;
            private PrintTest preview;
    
            public PreviewCanvas(PrintTest pt, String str) {
                printStr = str;
                preview = pt;
            }
    
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D) g;
                PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
    
                double xoff;
                double yoff;
                double scale;
                double px = pf.getWidth();
                double py = pf.getHeight();
                double sx = getWidth() - 1;
                double sy = getHeight() - 1;
                if (px / py < sx / sy) {
                    scale = sy / py;
                    xoff = 0.5 * (sx - scale * px);
                    yoff = 0;
                } else {
                    scale = sx / px;
                    xoff = 0;
                    yoff = 0.5 * (sy - scale * py);
                }
                g2.translate((float) xoff, (float) yoff);
                g2.scale((float) scale, (float) scale);
    
                Rectangle2D page = new Rectangle2D.Double(0, 0, px, py);
                g2.setPaint(Color.white);
                g2.fill(page);
                g2.setPaint(Color.black);
                g2.draw(page);
    
                try {
                    preview.print(g2, pf, currentPage);
                } catch (PrinterException pe) {
                    g2.draw(new Line2D.Double(0, 0, px, py));
                    g2.draw(new Line2D.Double(0, px, 0, py));
                }
            }
    
            public void viewPage(int pos) {
                int newPage = currentPage + pos;
                if (0 <= newPage && newPage < preview.getPagesCount(printStr)) {
                    currentPage = newPage;
                    repaint();
                }
            }
        }
    }
    public class PrintTest extends JFrame implements ActionListener, Printable {
        /**
         * 
         */
        private static final long serialVersionUID = -1898922341899485331L;
        private JButton printTextButton = new JButton("Print Text");
        private JButton previewButton = new JButton("Print Preview");
        private JButton printText2Button = new JButton("Print Text2");
        private JButton printFileButton = new JButton("Print File");
        private JButton printFrameButton = new JButton("Print Frame");
        private JButton exitButton = new JButton("Exit");
        private JLabel tipLabel = new JLabel("");
        private JTextArea area = new JTextArea();
        private JScrollPane scroll = new JScrollPane(area);
        private JPanel buttonPanel = new JPanel();
    
        private int PAGES = 0;
        private String printStr;
    
        public PrintTest() {
            this.setTitle("Print Test");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setBounds((int) ((SystemProperties.SCREEN_WIDTH - 800) / 2),
                    (int) ((SystemProperties.SCREEN_HEIGHT - 600) / 2), 800, 600);
            initLayout();
        }
    
        private void initLayout() {
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add(scroll, BorderLayout.CENTER);
            printTextButton.setMnemonic('P');
            printTextButton.addActionListener(this);
            buttonPanel.add(printTextButton);
            previewButton.setMnemonic('v');
            previewButton.addActionListener(this);
            buttonPanel.add(previewButton);
            printText2Button.setMnemonic('e');
            printText2Button.addActionListener(this);
            buttonPanel.add(printText2Button);
            printFileButton.setMnemonic('i');
            printFileButton.addActionListener(this);
            buttonPanel.add(printFileButton);
            printFrameButton.setMnemonic('F');
            printFrameButton.addActionListener(this);
            buttonPanel.add(printFrameButton);
            exitButton.setMnemonic('x');
            exitButton.addActionListener(this);
            buttonPanel.add(exitButton);
            this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
        }
    
        public void actionPerformed(ActionEvent evt) {
            Object src = evt.getSource();
            if (src == printTextButton) {
                printTextAction();
            } else if (src == previewButton) {
                previewAction();
            } else if (src == printText2Button) {
                printText2Action();
            } else if (src == printFileButton) {
                printFileAction();
            } else if (src == printFrameButton) {
                printFrameAction();
            } else if (src == exitButton) {
                exitApp();
            }
        }
    
        public int print(Graphics g, PageFormat pf, int page)
                throws PrinterException {
            Graphics2D g2 = (Graphics2D) g;
            g2.setPaint(Color.black);
            if (page >= PAGES) {
                return Printable.NO_SUCH_PAGE;
            }
            g2.translate(pf.getImageableX(), pf.getImageableY());
            drawCurrentPageText(g2, pf, page);
            return Printable.PAGE_EXISTS;
        }
    
        private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page) {
            Font f = area.getFont();
            String s = getDrawText(printStr)[page];
            String drawText;
            float ascent = 16;
            int k, i = f.getSize(), lines = 0;
            while (s.length() > 0 && lines < 54) {
                k = s.indexOf('\n');
                if (k != -1) {
                    lines += 1;
                    drawText = s.substring(0, k);
                    g2.drawString(drawText, 0, ascent);
                    if (s.substring(k + 1).length() > 0) {
                        s = s.substring(k + 1);
                        ascent += i;
                    }
                } else {
                    lines += 1;
                    drawText = s;
                    g2.drawString(drawText, 0, ascent);
                    s = "";
                }
            }
        }
    
        public String[] getDrawText(String s) {
            String[] drawText = new String[PAGES];
            for (int i = 0; i < PAGES; i++) {
                drawText[i] = "";
            }
    
            int k, suffix = 0, lines = 0;
            while (s.length() > 0) {
                if (lines < 54) {
                    k = s.indexOf('\n');
                    if (k != -1) {
                        lines += 1;
                        drawText[suffix] = drawText[suffix] + s.substring(0, k + 1);
                        if (s.substring(k + 1).length() > 0) {
                            s = s.substring(k + 1);
                        }
                    } else {
                        lines += 1;
                        drawText[suffix] = drawText[suffix] + s;
                        s = "";
                    }
                } else {
                    lines = 0;
                    suffix++;
                }
            }
            return drawText;
        }
    
        public int getPagesCount(String curStr) {
            int page = 0;
            int position, count = 0;
            String str = curStr;
            while (str.length() > 0) {
                position = str.indexOf('\n');
                count += 1;
                if (position != -1) {
                    str = str.substring(position + 1);
                } else {
                    str = "";
                }
            }
    
            if (count > 0) {
                page = count / 54 + 1;
            }
    
            return page;
        }
    
        private void printTextAction() {
            printStr = area.getText().trim();
            if (printStr != null && printStr.length() > 0) {
                PAGES = getPagesCount(printStr);
                PrinterJob myPrtJob = PrinterJob.getPrinterJob();
                PageFormat pageFormat = myPrtJob.defaultPage();
                myPrtJob.setPrintable(this, pageFormat);
                if (myPrtJob.printDialog()) {
                    try {
                        myPrtJob.print();
                    } catch (PrinterException pe) {
                        pe.printStackTrace();
                    }
                }
            } else {
                JOptionPane.showConfirmDialog(null,
                        "Sorry, Printer Job is Empty, Print Cancelled!", "Empty",
                        JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);
            }
        }
    
        private void previewAction() {
            printStr = area.getText().trim();
            PAGES = getPagesCount(printStr);
            new PrintPreviewDialog(this, "Print Preview", true, this, printStr)
                    .setVisible(true);
        }
    
        private void printText2Action() {
            printStr = area.getText().trim();
            if (printStr != null && printStr.length() > 0) {
                PAGES = getPagesCount(printStr);
                DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
                PrintService printService = PrintServiceLookup
                        .lookupDefaultPrintService();
                DocPrintJob job = printService.createPrintJob();
                PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                DocAttributeSet das = new HashDocAttributeSet();
                Doc doc = new SimpleDoc(this, flavor, das);
    
                try {
                    job.print(doc, pras);
                } catch (PrintException pe) {
                    pe.printStackTrace();
                }
            } else {
                JOptionPane.showConfirmDialog(null,
                        "Sorry, Printer Job is Empty, Print Cancelled!", "Empty",
                        JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);
            }
        }
    
        private void printFileAction() {
            JFileChooser fileChooser = new JFileChooser(SystemProperties.USER_DIR);
            // fileChooser.setFileFilter(new com.szallcom.file.JavaFilter());
            int state = fileChooser.showOpenDialog(this);
            if (state == JFileChooser.APPROVE_OPTION) {
                File file = fileChooser.getSelectedFile();
                PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                PrintService printService[] = PrintServiceLookup
                        .lookupPrintServices(flavor, pras);
                PrintService defaultService = PrintServiceLookup
                        .lookupDefaultPrintService();
                PrintService service = ServiceUI.printDialog(null, 200, 200,
                        printService, defaultService, flavor, pras);
                if (service != null) {
                    try {
                        DocPrintJob job = service.createPrintJob();
                        FileInputStream fis = new FileInputStream(file);
                        DocAttributeSet das = new HashDocAttributeSet();
                        Doc doc = new SimpleDoc(fis, flavor, das);
                        job.print(doc, pras);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        private void printFrameAction() {
            Toolkit kit = Toolkit.getDefaultToolkit();
            Properties props = new Properties();
            props.put("awt.print.printer", "durango");
            props.put("awt.print.numCopies", "2");
            if (kit != null) {
                PrintJob printJob = kit.getPrintJob(this, "Print Frame", props);
                if (printJob != null) {
                    Graphics pg = printJob.getGraphics();
                    if (pg != null) {
                        try {
                            this.printAll(pg);
                        } finally {
                            pg.dispose();
                        }
                    }
                    printJob.end();
                }
            }
        }
    
        private void exitApp() {
            this.setVisible(false);
            this.dispose();
            System.exit(0);
        }
    
        public static void main(String[] args) {
            new PrintTest().setVisible(true);
        }
    }
    
    public final class SystemProperties {
        public static final double SCREEN_WIDTH = Toolkit.getDefaultToolkit()
                .getScreenSize().getWidth();
        public static final double SCREEN_HEIGHT = Toolkit.getDefaultToolkit()
                .getScreenSize().getHeight();
        public static final String USER_DIR = System.getProperty("user.dir");
        public static final String USER_HOME = System.getProperty("user.home");
        public static final String USER_NAME = System.getProperty("user.name");
        public static final String FILE_SEPARATOR = System
                .getProperty("file.separator");
        public static final String LINE_SEPARATOR = System
                .getProperty("line.separator");
        public static final String PATH_SEPARATOR = System
                .getProperty("path.separator");
        public static final String JAVA_HOME = System.getProperty("java.home");
        public static final String JAVA_VENDOR = System.getProperty("java.vendor");
        public static final String JAVA_VENDOR_URL = System
                .getProperty("java.vendor.url");
        public static final String JAVA_VERSION = System
                .getProperty("java.version");
        public static final String JAVA_CLASS_PATH = System
                .getProperty("java.class.path");
        public static final String JAVA_CLASS_VERSION = System
                .getProperty("java.class.version");
        public static final String OS_NAME = System.getProperty("os.name");
        public static final String OS_ARCH = System.getProperty("os.arch");
        public static final String OS_VERSION = System.getProperty("os.version");
        public static final String[] FONT_NAME_LIST = GraphicsEnvironment
                .getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
        public static final Font[] FONT_LIST = GraphicsEnvironment
                .getLocalGraphicsEnvironment().getAllFonts();
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度