如何使用JTabbedPane将多个JPanels(3)放入JPanel?

时间:2013-10-07 08:49:48

标签: java swing jpanel jtabbedpane

我正在尝试使用JTabbedPane创建一个gui应用程序来创建连接到数据库的5个选项卡。每个选项卡包含一个面板,其中包含3个面板(一个面板用于容纳JButtons,另一个面板用于容纳JLabel和JTextFields,最后一个用于容纳JTable。每个面板分别用于南,中和北)。但是在创建选项卡及其组件之后,只显示最后一个选项卡并且它显示不正确(它显示所有5个选项卡的JLabel,JTextfields和JButtons)。如果我删除所有选项卡并保留一个正确显示但如果多个选项卡显示在最后一个选项卡上。我不知道如何解决它。请帮帮我。

源代码有点冗长所以请耐心帮我检查一下。如果有更好的方法来编写代码,请告诉我。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.Vector;

public class Project_SalesDatabase extends JFrame {

JTabbedPane tabbedPane = new JTabbedPane();
ImageIcon icon = createImageIcon("images/middle.gif");
JButton view = new JButton(" View ");
JButton save = new JButton(" Save ");
JButton addNew = new JButton(" Add New ");
JButton exit = new JButton(" Exit Application ");
JPanel displayBiscuitsPanel = new JPanel();
JPanel displayCookingPanel = new JPanel();
JPanel displayCustomersPanel = new JPanel();
JPanel displayEmployeesPanel = new JPanel();
JPanel displayProvisionsPanel = new JPanel();
JPanel displayButton = new JPanel();
JPanel displayContent = new JPanel((new GridLayout(10, 2)));
JPanel displayTable = new JPanel(new GridLayout(1, 2));
JTextField biscuitName = new JTextField();
JTextField biscuitPrice = new JTextField();
JTextField biscuitCompany = new JTextField();
JTextField quantityOfBiscuitsBought = new JTextField();
JTextField quantityOfBiscuitsSold = new JTextField();
JTextField quantityInStock = new JTextField();
JTextField itemName = new JTextField();
JTextField itemPrice = new JTextField();
JTextField itemType = new JTextField();
JTextField quantityOfitemsBought = new JTextField();
JTextField quantityOfitemsSold = new JTextField();
JTextField firstName = new JTextField();
JTextField lastName = new JTextField();
JTextField customerAttendant = new JTextField();
JTextField customerAttendantPosition = new JTextField();
JTextField isCustomerADebtor = new JTextField();
JTextField orderNumber = new JTextField();
JTextField debtAmount = new JTextField();
JTextField address = new JTextField();
JTextField phoneNumber = new JTextField();
JTextField position = new JTextField();
JTextField age = new JTextField();
JTextField salary = new JTextField();
JTextField nextOfKin = new JTextField();
JTextField relationshipWithNextOfKin = new JTextField();
JTextField nextOfKinPhoneNumber = new JTextField();
JTextField itemCompany = new JTextField();

public static void main(String[] args) {
    Project_SalesDatabase mainFrame = new Project_SalesDatabase();
    mainFrame.setLocationRelativeTo(null);
    mainFrame.setVisible(true);
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public Project_SalesDatabase() {

    setTitle(" Database App ");
    setSize(1000, 500);

    // Create the tab pages
    biscuitsTable();
    cookingIngredientsTable();
    customersTable();
    employeesTable();
    provisionsTable();

    JPanel topPanel = new JPanel();
    topPanel.setLayout(new GridLayout(1, 3));
    getContentPane().add(topPanel);
    topPanel.add(tabbedPane, BorderLayout.CENTER);


    // Create tabs in tabbedPane
    tabbedPane.addTab("Biscuits Database", icon, displayBiscuitsPanel,
            "Allows you to view or Enter Data into the Biscuits Database");

    tabbedPane.addTab("Cooking Ingredients Database", icon, displayCookingPanel,
            "Allows you to view or Enter Data into the Cooking Ingredients Database");

    tabbedPane.addTab("Customers Database", icon, displayCustomersPanel,
            "Allows you to view or Enter Data into the Customers Database");

    tabbedPane.addTab("Employees Database", icon, displayEmployeesPanel,
            "Allows you to view or Enter Data into the Employees Database");

    tabbedPane.addTab("Provisions Database", icon, displayProvisionsPanel,
            "Allows you to view or Enter Data into the Provisions Database");

    //Enable scrolling in tabs.
    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
}

public static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = Project_SalesDatabase.class.getResource(path);
    if (imgURL != null) {
        return new ImageIcon(imgURL);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

public final void biscuitsTable() {
    displayBiscuitsPanel.setLayout(new BorderLayout());
    displayBiscuitsPanel.add(displayContent, BorderLayout.CENTER);
    displayBiscuitsPanel.add(displayButton, BorderLayout.SOUTH);
    displayBiscuitsPanel.add(displayTable, BorderLayout.NORTH);

    displayContent.add(new JLabel("Biscuit Name"));
    displayContent.add(biscuitName);
    displayContent.add(new JLabel("Biscuit Price"));
    displayContent.add(biscuitPrice);
    displayContent.add(new JLabel("Biscuit Company"));
    displayContent.add(biscuitCompany);
    displayContent.add(new JLabel("Quantity Of Biscuits Bought"));
    displayContent.add(quantityOfBiscuitsBought);
    displayContent.add(new JLabel("Quantity Of Biscuits Sold"));
    displayContent.add(quantityOfBiscuitsSold);
    displayContent.add(new JLabel("Quantity In Stock"));
    displayContent.add(quantityInStock);

    displayButton.add(addNew);
    displayButton.add(save);
    displayButton.add(view);
    displayButton.add(exit);

    view.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            String db_url = "jdbc:odbc:ProjectSalesDatabase";
            String username = "";
            String password = "";
            Connection con = null;

            try {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                con = DriverManager.getConnection(db_url, username, password);
            } catch (ClassNotFoundException | SQLException f) {
                JOptionPane.showMessageDialog(rootPane, f.getMessage());
            }

            Statement state = null;
            ResultSet set = null;

            try {

                String Query = "SELECT * FROM Biscuits";
                state = con.createStatement();
                set = state.executeQuery(Query);

                boolean nextrec = set.next();
                if (!nextrec) {
                    JOptionPane.showMessageDialog(rootPane, "No Record");
                } else {
                    Vector col = new Vector();
                    Vector row = new Vector();

                    ResultSetMetaData rsm = set.getMetaData();

                    for (int x = 1; x <= rsm.getColumnCount(); x++) {
                        col.addElement(rsm.getColumnName(x));
                    }
                    do {
                        row.addElement(getNextRow(set, rsm));
                    } while (set.next());

                    JTable tab = new JTable(row, col);
                    displayContent.removeAll();
                    displayTable.removeAll();
                    displayTable.add(new JScrollPane(tab), BorderLayout.CENTER);

                    validate();
                }
                state.close();
            } catch (SQLException sql) {
                JOptionPane.showMessageDialog(rootPane, sql.getMessage());
            }
        }
    });

    save.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            try {
                String Query = "INSERT INTO Biscuits VALUES ('" + biscuitName.getText() + "',"
                        + "          '" + biscuitPrice.getText() + "',"
                        + "          '" + biscuitCompany.getText() + "',"
                        + "          '" + quantityOfBiscuitsBought.getText() + "',"
                        + "          '" + quantityOfBiscuitsSold.getText() + "',"
                        + "          '" + quantityInStock.getText() + "')";

                String db_url = "jdbc:odbc:ProjectSalesDatabase";
                String username = "";
                String password = "";
                Connection con = null;
                try {
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                    con = DriverManager.getConnection(db_url, username, password);
                } catch (ClassNotFoundException | SQLException f) {

                    JOptionPane.showMessageDialog(rootPane, f.getMessage());
                }
                Statement state = con.createStatement();
                int rep = state.executeUpdate(Query);
                if (rep == 0) {
                    JOptionPane.showMessageDialog(rootPane, "No Data Saved");
                } else {
                    JOptionPane.showMessageDialog(rootPane, "Data Saved");
                }
            } catch (SQLException sqle) {
                sqle.getMessage();
            }
        }
    });

    addNew.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            try {

                biscuitName.setText("");
                biscuitPrice.setText("");
                biscuitCompany.setText("");
                quantityOfBiscuitsBought.setText("");
                quantityOfBiscuitsSold.setText("");
                quantityInStock.setText("");

                displayTable.removeAll();
                displayContent.removeAll();

                displayContent.add(new JLabel("Biscuit Name"));
                displayContent.add(biscuitName);
                displayContent.add(new JLabel("Biscuit Price"));
                displayContent.add(biscuitPrice);
                displayContent.add(new JLabel("Biscuit Company"));
                displayContent.add(biscuitCompany);
                displayContent.add(new JLabel("Quantity Of Biscuits Bought"));
                displayContent.add(quantityOfBiscuitsBought);
                displayContent.add(new JLabel("Quantity Of Biscuits Sold"));
                displayContent.add(quantityOfBiscuitsSold);
                displayContent.add(new JLabel("Quantity In Stock"));
                displayContent.add(quantityInStock);

                validate();

            } catch (Exception f) {
                f.getMessage();
            }
        }
    });

    exit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });
}

public final void cookingIngredientsTable() {
    displayCookingPanel.setLayout(new BorderLayout());
    displayCookingPanel.add(displayContent, BorderLayout.CENTER);
    displayCookingPanel.add(displayButton, BorderLayout.SOUTH);
    displayCookingPanel.add(displayTable, BorderLayout.NORTH);

    displayContent.add(new JLabel("Item Name"));
    displayContent.add(itemName);
    displayContent.add(new JLabel("Item Price"));
    displayContent.add(itemPrice);
    displayContent.add(new JLabel("Item Type"));
    displayContent.add(itemType);
    displayContent.add(new JLabel("Quantity Of Items Bought"));
    displayContent.add(quantityOfitemsBought);
    displayContent.add(new JLabel("Quantity Of Items Sold"));
    displayContent.add(quantityOfitemsSold);
    displayContent.add(new JLabel("Quantity In Stock"));
    displayContent.add(quantityInStock);

    displayButton.add(addNew);
    displayButton.add(save);
    displayButton.add(view);
    displayButton.add(exit);

    view.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String db_url = "jdbc:odbc:ProjectSalesDatabase";
            String username = "";
            String password = "";
            Connection con = null;
            try {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                con = DriverManager.getConnection(db_url, username, password);
            } catch (ClassNotFoundException | SQLException f) {
                JOptionPane.showMessageDialog(rootPane, f.getMessage());
            }

            Statement state = null;
            ResultSet set = null;

            try {

                String Query = "SELECT * FROM CookingIngredients";
                state = con.createStatement();
                set = state.executeQuery(Query);

                boolean nextrec = set.next();
                if (!nextrec) {
                    JOptionPane.showMessageDialog(rootPane, "No Record");
                } else {
                    Vector col = new Vector();
                    Vector row = new Vector();

                    ResultSetMetaData rsm = set.getMetaData();

                    for (int x = 1; x <= rsm.getColumnCount(); x++) {
                        col.addElement(rsm.getColumnName(x));
                    }
                    do {
                        row.addElement(getNextRow(set, rsm));
                    } while (set.next());
                    JTable tab = new JTable(row, col);
                    displayContent.removeAll();
                    displayTable.removeAll();
                    displayTable.add(new JScrollPane(tab), BorderLayout.CENTER);
                    validate();
                }
                state.close();

            } catch (SQLException sql) {
                JOptionPane.showMessageDialog(rootPane, sql.getMessage());
            }
        }
    });

    save.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            try {
                String Query = "INSERT INTO CookingIngredients VALUES ('" + itemName.getText() + "',"
                        + "          '" + itemPrice.getText() + "',"
                        + "          '" + itemType.getText() + "',"
                        + "          '" + quantityOfitemsBought.getText() + "',"
                        + "          '" + quantityOfitemsSold.getText() + "',"
                        + "          '" + quantityInStock.getText() + "')";

                String db_url = "jdbc:odbc:ProjectSalesDatabase";
                String username = "";
                String password = "";
                Connection con = null;
                try {
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                    con = DriverManager.getConnection(db_url, username, password);
                } catch (ClassNotFoundException | SQLException f) {
                    JOptionPane.showMessageDialog(rootPane, f.getMessage());
                }
                Statement state = con.createStatement();
                int rep = state.executeUpdate(Query);
                if (rep == 0) {
                    JOptionPane.showMessageDialog(rootPane, "No Data Saved");
                } else {
                    JOptionPane.showMessageDialog(rootPane, "Data Saved");
                }
            } catch (SQLException sqle) {
                sqle.getMessage();
            }
        }
    });

    addNew.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            try {

                itemName.setText("");
                itemPrice.setText("");
                itemType.setText("");
                quantityOfitemsBought.setText("");
                quantityOfBiscuitsSold.setText("");
                quantityOfitemsSold.setText("");
                quantityInStock.setText("");

                displayTable.removeAll();
                displayContent.removeAll();

                displayContent.add(new JLabel("Item Name"));
                displayContent.add(itemName);
                displayContent.add(new JLabel("Item Price"));
                displayContent.add(itemPrice);
                displayContent.add(new JLabel("Item Type"));
                displayContent.add(itemType);
                displayContent.add(new JLabel("Quantity Of Items Bought"));
                displayContent.add(quantityOfitemsBought);
                displayContent.add(new JLabel("Quantity Of Items Sold"));
                displayContent.add(quantityOfitemsSold);
                displayContent.add(new JLabel("Quantity In Stock"));
                displayContent.add(quantityInStock);

                validate();

            } catch (Exception f) {
                f.getMessage();
            }
        }
    });
}

public final void customersTable() {
    displayCustomersPanel.setLayout(new BorderLayout());
    displayCustomersPanel.add(displayContent, BorderLayout.CENTER);
    displayCustomersPanel.add(displayButton, BorderLayout.SOUTH);
    displayCustomersPanel.add(displayTable, BorderLayout.NORTH);

    displayContent.add(new JLabel("First Name"));
    displayContent.add(firstName);
    displayContent.add(new JLabel("Last Name"));
    displayContent.add(lastName);
    displayContent.add(new JLabel("Customer Attendant"));
    displayContent.add(customerAttendant);
    displayContent.add(new JLabel("Customer Attendant's Position"));
    displayContent.add(customerAttendantPosition);
    displayContent.add(new JLabel("Is This Customer A Debtor?"));
    displayContent.add(isCustomerADebtor);
    displayContent.add(new JLabel("Order Number"));
    displayContent.add(orderNumber);
    displayContent.add(new JLabel("Debt Amount"));
    displayContent.add(debtAmount);
    displayContent.add(new JLabel("Customer's Address"));
    displayContent.add(address);
    displayContent.add(new JLabel("Customer's Phone Number"));
    displayContent.add(phoneNumber);

    displayButton.add(addNew);
    displayButton.add(save);
    displayButton.add(view);
    displayButton.add(exit);

    //button actions same as other methods. Removed it because of body character limits
}

public final void employeesTable() {
    displayEmployeesPanel.setLayout(new BorderLayout());
    displayEmployeesPanel.add(displayContent, BorderLayout.CENTER);
    displayEmployeesPanel.add(displayButton, BorderLayout.SOUTH);
    displayEmployeesPanel.add(displayTable, BorderLayout.NORTH);

    displayContent.add(new JLabel("First Name"));
    displayContent.add(firstName);
    displayContent.add(new JLabel("Last Name"));
    displayContent.add(lastName);
    displayContent.add(new JLabel("Position"));
    displayContent.add(position);
    displayContent.add(new JLabel("Age"));
    displayContent.add(age);
    displayContent.add(new JLabel("Salary"));
    displayContent.add(salary);
    displayContent.add(new JLabel("Employees's Address"));
    displayContent.add(address);
    displayContent.add(new JLabel("Employees's Phone Number(s)"));
    displayContent.add(phoneNumber);
    displayContent.add(new JLabel("Next of Kin"));
    displayContent.add(nextOfKin);
    displayContent.add(new JLabel("Relationship With Next of Kin"));
    displayContent.add(relationshipWithNextOfKin);
    displayContent.add(new JLabel("Next of Kin's Phone Number(s)"));
    displayContent.add(nextOfKinPhoneNumber);

    displayButton.add(addNew);
    displayButton.add(save);
    displayButton.add(view);
    displayButton.add(exit);

    //button actions same as other methods. Removed it because of body character limits
}

public final void provisionsTable() {
    displayProvisionsPanel.setLayout(new BorderLayout());
    displayProvisionsPanel.add(displayContent, BorderLayout.CENTER);
    displayProvisionsPanel.add(displayButton, BorderLayout.SOUTH);
    displayProvisionsPanel.add(displayTable, BorderLayout.NORTH);

    displayContent.add(new JLabel("Item Name"));
    displayContent.add(itemName);
    displayContent.add(new JLabel("Item Price"));
    displayContent.add(itemPrice);
    displayContent.add(new JLabel("Item Company"));
    displayContent.add(itemCompany);
    displayContent.add(new JLabel("Quantity Of Items Bought"));
    displayContent.add(quantityOfitemsBought);
    displayContent.add(new JLabel("Quantity Of Items Sold"));
    displayContent.add(quantityOfitemsSold);
    displayContent.add(new JLabel("Quantity In Stock"));
    displayContent.add(quantityInStock);

    displayButton.add(addNew);
    displayButton.add(save);
    displayButton.add(view);
    displayButton.add(exit);

    view.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String db_url = "jdbc:odbc:ProjectSalesDatabase";
            String username = "";
            String password = "";
            Connection con = null;
            try {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                con = DriverManager.getConnection(db_url, username, password);
            } catch (ClassNotFoundException | SQLException f) {
                JOptionPane.showMessageDialog(rootPane, f.getMessage());
            }

            Statement state = null;
            ResultSet set = null;

            try {

                String Query = "SELECT * FROM Provisions";
                state = con.createStatement();
                set = state.executeQuery(Query);

                boolean nextrec = set.next();
                if (!nextrec) {
                    JOptionPane.showMessageDialog(rootPane, "No Record");
                } else {
                    Vector col = new Vector();
                    Vector row = new Vector();

                    ResultSetMetaData rsm = set.getMetaData();

                    for (int x = 1; x <= rsm.getColumnCount(); x++) {
                        col.addElement(rsm.getColumnName(x));
                    }
                    do {
                        row.addElement(getNextRow(set, rsm));
                    } while (set.next());

                    JTable tab = new JTable(row, col);
                    displayContent.removeAll();
                    displayTable.removeAll();
                    displayTable.add(new JScrollPane(tab), BorderLayout.CENTER);

                    validate();
                }
                state.close();
            } catch (SQLException sql) {
                JOptionPane.showMessageDialog(rootPane, sql.getMessage());
            }
        }
    });

    save.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            try {
                String Query = "INSERT INTO Provisions VALUES ('" + itemName.getText() + "',"
                        + "          '" + itemPrice.getText() + "',"
                        + "          '" + itemCompany.getText() + "',"
                        + "          '" + quantityOfitemsBought.getText() + "',"
                        + "          '" + quantityOfitemsSold.getText() + "',"
                        + "          '" + quantityInStock.getText() + "')";

                String db_url = "jdbc:odbc:ProjectSalesDatabase";
                String username = "";
                String password = "";
                Connection con = null;
                try {
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                    con = DriverManager.getConnection(db_url, username, password);
                } catch (ClassNotFoundException | SQLException f) {
                    JOptionPane.showMessageDialog(rootPane, f.getMessage());
                }
                Statement state = con.createStatement();
                int rep = state.executeUpdate(Query);
                if (rep == 0) {
                    JOptionPane.showMessageDialog(rootPane, "No Data Saved");
                } else {
                    JOptionPane.showMessageDialog(rootPane, "Data Saved");
                }
            } catch (SQLException sqle) {
                sqle.getMessage();
            }
        }
    });

    addNew.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            try {

                itemName.setText("");
                itemPrice.setText("");
                itemCompany.setText("");
                quantityOfitemsBought.setText("");
                quantityOfitemsSold.setText("");
                quantityInStock.setText("");

                displayTable.removeAll();
                displayContent.removeAll();

                displayContent.add(new JLabel("Item Name"));
                displayContent.add(itemName);
                displayContent.add(new JLabel("Item Price"));
                displayContent.add(itemPrice);
                displayContent.add(new JLabel("Item Company"));
                displayContent.add(itemCompany);
                displayContent.add(new JLabel("Quantity Of Items Bought"));
                displayContent.add(quantityOfitemsBought);
                displayContent.add(new JLabel("Quantity Of Items Sold"));
                displayContent.add(quantityOfitemsSold);
                displayContent.add(new JLabel("Quantity In Stock"));
                displayContent.add(quantityInStock);

                validate();

            } catch (Exception f) {
                f.getMessage();
            }
        }
    });
}

Vector getNextRow(ResultSet set, ResultSetMetaData rsm) {
    Vector currentRow = new Vector();
    try {
        for (int x = 1; x <= rsm.getColumnCount(); x++) {
            switch (rsm.getColumnType(x)) {
                case Types.VARCHAR:
                    currentRow.addElement(set.getString(x));
                    break;
                case Types.INTEGER:
                    currentRow.addElement(new Long(set.getLong(x)));
                    break;
                default:
                    System.out.println("No column type known");
                    break;
            }
        }
    } catch (SQLException sqle) {
        sqle.getMessage();
    }
    return currentRow;
}
}

我不知道为什么它不能正常工作。如果有人可以尝试编译/运行它,看看我在说什么。感谢。

2 个答案:

答案 0 :(得分:0)

您可能需要使用getTabComponentAt(index)方法将组件添加到特定选项卡

答案 1 :(得分:0)

I am trying to create a gui app using JTabbedPane to create 5 tabs. Each tab contains a panel with 3 panels in it

与Swing组件的性质一样,除了JComponent之外,您可以将一个JFrame嵌入到另一个组件中。 因此,您需要做的是创建JPanel。确保它有3个cols和1行的GridLayout(或者相反,如果你需要的话)。
然后,将三个JPanels添加到具有网格布局的此基础JPanel。

最后,将基础JPanel添加到您的JTabbedPane。请查看JPanel教程:http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html