如何用java实现,1.白色的提示结账面(就是图片中间的白色图片跟上面显示的结账单),2.用什么方法如何打印出来结账单
我上传了附件,有会的帮忙讲解下,或是写个代码带个注释!
问题补充
第一个问题知道了,第二个问题有谁知道?就是打印结账单如何打印,写个简单的出来,最好加个注释,非常感谢!
问题补充
太强悍了!!!
如何用java实现,1.白色的提示结账面(就是图片中间的白色图片跟上面显示的结账单),2.用什么方法如何打印出来结账单
我上传了附件,有会的帮忙讲解下,或是写个代码带个注释!
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(); }