有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java动态生成收据

     final JFrame frame = new JFrame("Bill");
    frame.getContentPane().setBackground(Color.WHITE);
     JLabel jlabel = new JLabel("");
        jlabel.setFont(new Font("Serif", Font.PLAIN, 12));
        frame.add(jlabel);
        frame.validate();
        frame.repaint();
        jlabel = new JLabel("-----------BILL-----------");
        jlabel.setFont(new Font("Serif", Font.PLAIN, 20));
        frame.add(jlabel);
        frame.validate();
        frame.repaint();

        jlabel = new JLabel("");
        jlabel.setFont(new Font("Serif", Font.PLAIN, 12));
        frame.add(jlabel);
        frame.validate();
        frame.repaint();
    frame.setLayout(new GridLayout(0, 3));
    try {

        String sql = "SELECT * FROM order_detail";
        rs = st.executeQuery(sql);
        frame.add(new JLabel("Item"));
            frame.validate();
            frame.repaint();
            frame.add(new JLabel("Quantity"));
            frame.validate();
            frame.repaint();
            frame.add(new JLabel("Amount"));
            frame.validate();
            frame.repaint();
        while (rs.next()) {
            String printLbl = rs.getString("Item");
            frame.add(new JLabel(printLbl));
            frame.validate();
            frame.repaint();
            printLbl =""+rs.getInt("Quantity");
            frame.add(new JLabel(printLbl));
            frame.validate();
            frame.repaint();
            printLbl = ""+rs.getInt("Cost");
            frame.add(new JLabel(printLbl));
            frame.validate();
            frame.repaint();

        }
        frame.add(new JLabel(""));            
        frame.validate();
        frame.repaint();
        frame.add(new JLabel("Total"));            
        frame.validate();
        frame.repaint();
        frame.add(new JLabel(jLabel82.getText()));            
        frame.validate();
        frame.repaint();
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(700, 400);
    frame.setVisible(true);
    PrinterJob job = PrinterJob.getPrinterJob();
    job.setJobName("frame");
    job.setPrintable(new Printable() {
        public int print(Graphics pg, PageFormat pf, int pageNum) {
            if (pageNum > 0) {
                return Printable.NO_SUCH_PAGE;
            }

            Graphics2D g2 = (Graphics2D) pg;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            frame.paint(g2);
            return Printable.PAGE_EXISTS;
        }
    });
    boolean ok = job.printDialog();
    if (ok) {
        try {
            job.print();
        } catch (PrinterException ex) {

        }

我想创建一个票据收据,在该收据中,从将生成的票据数据库中提取项目。我已经使用了上面的代码,但我面临的问题是它的格式。我怎样才能把它放在正确的票据收据格式中


共 (2) 个答案

  1. # 1 楼答案

    虽然您的代码可以进行大量清理,但通常使用JComponents会有点麻烦,尤其是当它仅用于打印时。创建HTML文本,并将其放入标签中。那么你就有了更多的方式来设计事物。 Bill using HTML 首先,良好的格式是可能的。使用MessageFormat可以使用不同的区域设置,但至少有一个接收到正确的千个分隔符等等

    private static String formatInt(int amount) {
        return new MessageFormat("{0,number}").format(new Object[]{amount});
    }
    
    private static String formatAmount(int amount) {
        return new MessageFormat("{0,number,currency}").format(new Object[]{amount})
            .replace(' ', '\u00a0');
    }
    

    可以从数据库中生成HTML字符串:

    public static String billHTML() {
        StringBuilder sb = new StringBuilder();
        sb.append("<html>"
                + "<style type='text/css'>"
                + "body, h1, th, td {"
                + "  font-family: Serif;"
                + "  font-size: 12pt;"
                + "}"
                + "h1 {"
                + "  font-size: 20pt;"
                + "}"
                + "table {"
                //+ "  border-collapse: collapse;"
                //+ "  border-style: none;"
                + "}"
                + "td, th {"
                //+ "  border: thin solid gray;"
                + "}"
                + "th {"
                + "  border-bottom: thin solid gray;"
                + "}"
                + ".overline td {"
                + "  border-top: thin solid gray;"
                + "}"
                + "</style>"
                + "<body>");
        sb.append("<h1>- BILL -</h1>");
    
        String sql = "SELECT * FROM order_detail";
        try (PreparedStatement st = connection.prepareStatement(sql)) {
            try (ResultSet rs = st.executeQuery()) {
                sb.append("<table width='650' cellspacing='0'>"
                        + "<tr>"
                        + "<th width='50%' align='left'>Item</th>"
                        + "<th width='20%' align='right'>Quantity</th>"
                        + "<th width='30%' align='right'>Amount</th>"
                        + "</tr>");
                int total = 0;
                while (rs.next()) {
                    sb.append("<tr>"
                            + "<td>")
                        .append(rs.getString("Item"))
                        .append("</td>"
                            + "<td align='right'>")
                        .append(formatInt(rs.getInt("Quantity")))
                        .append("</td>"
                            + "<td align='right'>")
                        .append(formatAmount(rs.getInt("Cost")))
                        .append("</td>"
                            + "</tr>");
                    total += rs.getInt("Cost");
                }
                sb.append("<tr class='overline'>"
                        + "<td>&nbsp;")
                    .append("</td>"
                        + "<td align='right'>")
                    .append("Total")
                    .append("</td>"
                        + "<td align='right'>")
                    .append(formatAmount(total))
                    .append("</td>"
                        + "</tr>"
                    + "</table>");
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return sb.toString();
    }
    
        frame.getContentPane().setBackground(Color.WHITE);
        frame.getContentPane().setLayout(new FlowLayout());
        JLabel jlabel = new JLabel(billHTML());
        frame.add(jlabel);
    

    可以对整个表行使用MessageFormat,而不是追加链接

  2. # 2 楼答案

    package com.inse6260.atms.view;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Receipt
    {
    
     public Receipt(String receiptText, JFrame parent)
     {
        final JDialog dialog = new JDialog(parent,"TRANSACTION RECEIPT");
        JTextArea textArea = new JTextArea(100, 20);
        textArea.setEnabled(false);
        textArea.setDisabledTextColor(Color.BLACK);
        textArea.setText(receiptText);
        JButton closeButton = new JButton("Close");
        closeButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                dialog.setVisible(false);
                dialog.dispose();
            }
        });
        JPanel closePanel = new JPanel();
        closePanel.setLayout(new BoxLayout(closePanel, BoxLayout.LINE_AXIS));
        closePanel.add(Box.createHorizontalGlue());
        closePanel.add(closeButton);
        closePanel.setBorder(BorderFactory.createEmptyBorder(0,0,5,5));
        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.add(textArea, BorderLayout.CENTER);
        contentPane.add(closePanel, BorderLayout.PAGE_END);
        contentPane.setOpaque(true);
        dialog.setContentPane(contentPane);
        dialog.setSize(300, 130);
        dialog.setLocationRelativeTo(parent);
        dialog.setVisible(true);
    }
    }
    

    请尝试此代码,它可能会帮助您