簡體   English   中英

我有 2 個類和一個包含 4 個 JPanel 的 JFrame 的調試代碼

[英]Debugging code I have with 2 classes and a JFrame that holds 4 JPanels

我正在尋求幫助來調試我編寫的這個程序,沒有錯誤,但目標是創建一個框架,其中包含三個面板,每個面板都有一個標題邊框。 我遇到了困難,因為我的提示要求我創建 2 個構造函數和 2 個類,所以當我在 main 中調用 DailySales 類時,我覺得它不包括另一個類。

所以基本上我怎樣才能讓面板顯示出來,同時仍然保留兩個類和兩個構造函數,以及如何為每個 JPanel 添加標題邊框,抱歉,我在 Oracle 教程中遇到了困難。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DailySales extends JPanel {

    final int lPizzaPrice = 12;
    final int mPizzaPrice = 9;
    final int sPizzaPrice = 6;
    final int bSticksPrice = 3;

    final double tax = .06;
    final int dailyOper = 1000;

    String lPizza;
    String mPizza;
    String sPizza;
    String bSticks;

    int largePizza;
    int mediumPizza;
    int smallPizza;
    int breadSticks;

    int totalLargePizza;
    int totalMediumPizza;
    int totalSmallPizza;
    int totalBreadSticks;

    int totalSales;
    double totalTax;
    double netSales;
    int operCost;
    double profit;

    private FlowLayout dailyFlow;
    private Container container;

    JLabel lPizzaLabel = new JLabel("Large Pizza");//creating labels
    JLabel mPizzaLabel = new JLabel("Medium Pizza");
    JLabel sPizzaLabel = new JLabel("Small Pizza");
    JLabel bSticksLabel = new JLabel("Bread Sticks");

    JLabel totalSalesLabel = new JLabel("Total Sales");
    JLabel totalTaxLabel = new JLabel("Total Tax");
    JLabel netSalesLabel = new JLabel("Net Sales");
    JLabel dailyCostLabel = new JLabel("Daily Oper Cost");
    JLabel profitLabel = new JLabel("Profit or Loss");

    JTextField largeField = new JTextField(10);
    JTextField mediumField = new JTextField(10);

    JTextField smallField = new JTextField(10);
    JTextField breadField = new JTextField(10);

    JTextField totalLargeField = new JTextField(10);
    JTextField totalMediumField = new JTextField(10);
    JTextField totalSmallField = new JTextField(10);
    JTextField totalBreadField = new JTextField(10);

    JTextField totalSalesField = new JTextField(10);
    JTextField totalTaxField = new JTextField(10);
    JTextField netSalesField = new JTextField(10);
    JTextField dailyCostField = new JTextField(10);
    JTextField profitField = new JTextField(10);

    JButton clearButton = new JButton("Clear Fields");//Creating buttons
    JButton calculateButton = new JButton("Calculate");
    JButton exitButton = new JButton("Exit");

    JPanel subPanel1 = new JPanel();
    JPanel subPanel2 = new JPanel();
    JPanel subPanel3 = new JPanel();
    JPanel top = new JPanel();

    public class GUI extends JPanel {

        public GUI() {

            subPanel1.setLayout(dailyFlow);
            subPanel1.add(lPizzaLabel, largeField);
            subPanel1.add(mPizzaLabel, mediumField);
            subPanel1.add(sPizzaLabel, smallField);
            subPanel1.add(bSticksLabel, breadField);
            subPanel1.setSize(100, 100);

            subPanel2.setLayout(dailyFlow);
            subPanel2.add(totalLargeField);
            subPanel2.add(totalMediumField);
            subPanel2.add(totalSmallField);
            subPanel2.add(totalBreadField);

            subPanel3.setLayout(dailyFlow);
            subPanel3.add(totalSalesLabel, totalSalesField);
            subPanel3.add(totalTaxLabel, totalTaxField);
            subPanel3.add(netSalesLabel, netSalesField);
            subPanel3.add(dailyCostLabel, dailyCostField);
            subPanel3.add(profitLabel, profitField);

            top.setBackground(Color.red);
            JLabel title = new JLabel("Eve's Pizza Daily Sales");
            title.setFont(new Font("Helvetica", 1, 14));
            top.add(title);
            totalSalesField.setEditable(false);//making total field uneditable
            totalTaxField.setEditable(false);
            netSalesField.setEditable(false);
            dailyCostField.setEditable(false);
            profitField.setEditable(false);
        }
    }

    public DailySales() //creating a constructor
    {

        /**
         * The constructor with all the layout informations and operators
         *
         *
         * Also adding all labels, textfields, and buttons to frame. making the
         * total field uneditable
         */
        JFrame frame = new JFrame();
        frame.add(subPanel1);
        frame.add(subPanel2);
        frame.add(subPanel3);
        frame.add(top);
        frame.setSize(600, 450);
        frame.setVisible(true);

        clearButton.addActionListener(new ActionListener() {//initial button removes all entered text
            public void actionPerformed(ActionEvent e) {
                largeField.setText("");
                mediumField.setText("");
                smallField.setText("");
                breadField.setText("");
                totalLargeField.setText("");
                totalMediumField.setText("");
                totalSmallField.setText("");
                totalBreadField.setText("");
                totalSalesField.setText("");
                totalTaxField.setText("");
                netSalesField.setText("");
                dailyCostField.setText("");
                profitField.setText("");
            }
        });
        calculateButton.addActionListener(new ActionListener() {//update button calculates all the inputs and displays everything
            public void actionPerformed(ActionEvent e) {
                lPizza = largeField.getText();
                mPizza = mediumField.getText();
                sPizza = smallField.getText();
                bSticks = breadField.getText();

                largePizza = Integer.parseInt(lPizza);
                mediumPizza = Integer.parseInt(mPizza);
                smallPizza = Integer.parseInt(sPizza);
                breadSticks = Integer.parseInt(bSticks);

                totalLargePizza = (lPizzaPrice * largePizza);
                totalMediumPizza = (mPizzaPrice * mediumPizza);
                totalSmallPizza = (sPizzaPrice * smallPizza);
                totalBreadSticks = (bSticksPrice * breadSticks);

                totalLargeField.setText("" + totalLargePizza);
                totalMediumField.setText("" + totalMediumPizza);
                totalSmallField.setText("" + totalSmallPizza);
                totalBreadField.setText("" + totalBreadSticks);

                totalSales = (totalLargePizza + totalMediumPizza + totalSmallPizza + totalBreadSticks);
                totalTax = (totalSales * tax);
                netSales = (totalSales - totalTax);
                profit = (netSales - dailyOper);

                /**
                 * calculates total by adding all entered values if else
                 * statements for different situations that calculate the
                 * different between total and diet
                 */
                if (profit > 0) {
                    profitLabel.setText("Profit of ");
                } else if (profit < 0) {
                    profitLabel.setText("Loss of ");
                } else if (profit == 0) {
                    profitLabel.setText("No profit or loss ");
                }
                if (largePizza < 0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                } else if (mediumPizza < 0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                } else if (smallPizza < 0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                } else if (breadSticks < 0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                }
            }
        });
        exitButton.addActionListener(new ActionListener() {//close button closes the program when clicked on 

            @Override
            public void actionPerformed(ActionEvent e) {

                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        new DailySales();
    }
}

您仍然可以做很多事情來改善這一點,但這是有效的。

public class DailySales extends JPanel {

    final int lPizzaPrice = 12, mPizzaPrice = 9, sPizzaPrice = 6, bSticksPrice = 3;

    final double tax = .06;
    final int dailyOper = 1000;

    String lPizza, mPizza, sPizza, bSticks;
    int largePizza, mediumPizza, smallPizza, breadSticks, totalLargePizza,
            totalMediumPizza, totalSmallPizza, totalBreadSticks;

    int totalSales;
    double totalTax;
    double netSales;
    int operCost;
    double profit;

    JLabel lPizzaLabel     = new JLabel("Large Pizza");
    JLabel mPizzaLabel     = new JLabel("Medium Pizza");
    JLabel sPizzaLabel     = new JLabel("Small Pizza");
    JLabel bSticksLabel    = new JLabel("Bread Sticks");
    JLabel totalSalesLabel = new JLabel("Total Sales");
    JLabel totalTaxLabel   = new JLabel("Total Tax");
    JLabel netSalesLabel   = new JLabel("Net Sales");
    JLabel dailyCostLabel  = new JLabel("Daily Oper Cost");
    JLabel profitLabel     = new JLabel("Profit or Loss");

    JTextField largeField       = new JTextField(10);
    JTextField mediumField      = new JTextField(10);
    JTextField smallField       = new JTextField(10);
    JTextField breadField       = new JTextField(10);
    JTextField totalLargeField  = new JTextField(10);
    JTextField totalMediumField = new JTextField(10);
    JTextField totalSmallField  = new JTextField(10);
    JTextField totalBreadField  = new JTextField(10);
    JTextField totalSalesField  = new JTextField(10);
    JTextField totalTaxField    = new JTextField(10);
    JTextField netSalesField    = new JTextField(10);
    JTextField dailyCostField   = new JTextField(10);
    JTextField profitField      = new JTextField(10);

    JButton clearButton = new JButton("Clear Fields");// Creating buttons
    JButton calculateButton = new JButton("Calculate");
    JButton exitButton = new JButton("Exit");

    JPanel subPanel1 = new JPanel();
    JPanel subPanel2 = new JPanel();
    JPanel subPanel3 = new JPanel();
    JPanel top = new JPanel();

    public class GUI extends JPanel {
        public GUI() {

            subPanel1.setLayout(new GridLayout(4, 2));
            subPanel1.add(lPizzaLabel);
            subPanel1.add(largeField);
            subPanel1.add(mPizzaLabel);
            subPanel1.add(mediumField);
            subPanel1.add(sPizzaLabel);
            subPanel1.add(smallField);
            subPanel1.add(bSticksLabel);
            subPanel1.add(breadField);
            subPanel1.setBorder(BorderFactory.createTitledBorder("Panel 1"));

//          subPanel2.setLayout(new BoxLayout(subPanel2, BoxLayout.Y_AXIS)); // Same as next line
            subPanel2.setLayout(new GridLayout(4, 1));
            subPanel2.add(totalLargeField);
            subPanel2.add(totalMediumField);
            subPanel2.add(totalSmallField);
            subPanel2.add(totalBreadField);
            subPanel2.setBorder(BorderFactory.createTitledBorder("Panel 2"));

            subPanel3.setLayout(new GridLayout(5, 2));
            subPanel3.add(totalSalesLabel);
            subPanel3.add(totalSalesField);
            subPanel3.add(totalTaxLabel);
            subPanel3.add(totalTaxField);
            subPanel3.add(netSalesLabel);
            subPanel3.add(netSalesField);
            subPanel3.add(dailyCostLabel);
            subPanel3.add(dailyCostField);
            subPanel3.add(profitLabel);
            subPanel3.add(profitField);

            JLabel title = new JLabel("Eve's Pizza Daily Sales");
            title.setFont(new Font("Helvetica", 1, 14));
            top.add(title);
            top.setBackground(Color.YELLOW);

            totalSalesField.setEditable(false);// making total field uneditable
            totalTaxField.setEditable(false);
            netSalesField.setEditable(false);
            dailyCostField.setEditable(false);
            profitField.setEditable(false);
        }
    }

    public DailySales() // creating a constructor
    {
        /**
         * The constructor with all the layout informations and operators Also
         * adding all labels, textfields, and buttons to frame. making the total
         * field uneditable
         */

        new GUI();

        JPanel mainPanel = new JPanel(new GridLayout(2, 2));
        mainPanel.add(subPanel1);
        mainPanel.add(subPanel2);
        mainPanel.add(subPanel3);

        JPanel buttonPanel = new JPanel();
        buttonPanel.add(clearButton);
        buttonPanel.add(calculateButton);
        buttonPanel.add(exitButton);

        JFrame frame = new JFrame();
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(top, BorderLayout.PAGE_START);
        frame.getContentPane().add(mainPanel, BorderLayout.CENTER);
        frame.getContentPane().add(buttonPanel, BorderLayout.PAGE_END);

        frame.setSize(600, 450);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);


        clearButton.addActionListener(new ActionListener() {// initial button
                                                            // removes all
                                                            // entered text
            public void actionPerformed(ActionEvent e) {

                largeField.setText("");
                mediumField.setText("");
                smallField.setText("");
                breadField.setText("");
                totalLargeField.setText("");
                totalMediumField.setText("");
                totalSmallField.setText("");
                totalBreadField.setText("");
                totalSalesField.setText("");
                totalTaxField.setText("");
                netSalesField.setText("");
                dailyCostField.setText("");
                profitField.setText("");
            }
        });

        calculateButton.addActionListener(new ActionListener() {// update button
                                                                // calculates
                                                                // all the
                                                                // inputs and
                                                                // displays
                                                                // everything
            public void actionPerformed(ActionEvent e) {

                lPizza = largeField.getText();
                mPizza = mediumField.getText();
                sPizza = smallField.getText();
                bSticks = breadField.getText();
                largePizza = Integer.parseInt(lPizza);
                mediumPizza = Integer.parseInt(mPizza);
                smallPizza = Integer.parseInt(sPizza);
                breadSticks = Integer.parseInt(bSticks);
                totalLargePizza = (lPizzaPrice*largePizza);
                totalMediumPizza = (mPizzaPrice*mediumPizza);
                totalSmallPizza = (sPizzaPrice*smallPizza);
                totalBreadSticks = (bSticksPrice*breadSticks);
                totalLargeField.setText(""+totalLargePizza);
                totalMediumField.setText(""+totalMediumPizza);
                totalSmallField.setText(""+totalSmallPizza);
                totalBreadField.setText(""+totalBreadSticks);
                totalSales = (totalLargePizza+totalMediumPizza+totalSmallPizza+totalBreadSticks);
                totalTax = (totalSales*tax);
                netSales = (totalSales-totalTax);
                profit = (netSales-dailyOper);
                /**
                 * calculates total by adding all entered values if else
                 * statements for different situations that calculate the
                 * different between total and diet
                 */
                if (profit>0) {
                    profitLabel.setText("Profit of ");
                } else if (profit<0) {
                    profitLabel.setText("Loss of ");
                } else if (profit==0) {
                    profitLabel.setText("No profit or loss ");
                }
                if (largePizza<0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                } else if (mediumPizza<0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                } else if (smallPizza<0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                } else if (breadSticks<0) {
                    JOptionPane.showMessageDialog(null, "Quantity muist be >=0");
                }
            }
        });

        exitButton.addActionListener(new ActionListener() {// close button
                                                            // closes the
                                                            // program when
                                                            // clicked on
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        new DailySales();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM