1

我正在尝试使用 JTabbedPane 创建一个 gui 应用程序来创建连接到数据库的 5 个选项卡。每个选项卡都包含一个面板,其中包含 3 个面板(一个面板用于保存 JButton,另一个用于保存 JLabels 和 JTextField,最后一个用于保存 JTable。分别位于南、中和北)。但是在创建选项卡及其组件后,只显示最后一个选项卡并且显示不正确(它显示所有 5 个选项卡的 JLabels、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;
}
}

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

4

2 回答 2

0

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

于 2013-10-07T09:06:44.080 回答
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. 确保它有GridLayout3 列和 1 行(或相反,如果这是您的需要)。
然后,JPanels将这三个添加到具有网格布局的基本 JPanel 中。

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

于 2013-10-07T09:34:03.420 回答