如何在java中使用GUI?

如何在java中使用GUI?,java,database,swing,user-interface,Java,Database,Swing,User Interface,我目前正在学习所有关于swing和数据库的知识。我只是想尝试一些代码,所以我创建了一个程序,要求用户输入他/她的名字、姓氏、性别、生日和年龄。然后,输入将存储到数据库中。现在,我想用代码做三件事,但我不知道怎么做 我做了三个组合框,分别是月、日、年。我希望日期组合框根据我要选择的月份进行调整。例如,如果我选择二月,则日期最多只能是28 接下来,当我单击add item时,您可以在那里输入所有信息。一切正常,但我注意到当你点击退出按钮时,它会关闭一切。我希望退出按钮仅在整个菜单仍然可见时关闭添加项

我目前正在学习所有关于swing和数据库的知识。我只是想尝试一些代码,所以我创建了一个程序,要求用户输入他/她的名字、姓氏、性别、生日和年龄。然后,输入将存储到数据库中。现在,我想用代码做三件事,但我不知道怎么做

  • 我做了三个组合框,分别是月、日、年。我希望日期组合框根据我要选择的月份进行调整。例如,如果我选择二月,则日期最多只能是28

  • 接下来,当我单击add item时,您可以在那里输入所有信息。一切正常,但我注意到当你点击退出按钮时,它会关闭一切。我希望退出按钮仅在整个菜单仍然可见时关闭添加项部分

  • 最后,当我单击view项时,它会单独显示表。我想把桌子放在菜单上,就像添加项目一样

  • 这是我的密码:

    第1部分:

    package PersonalInfo;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class TableFormatter extends JFrame{
    private final int WIDTH = 600;
    private final int HEIGHT = 400;
    public TableFormatter(Object[][]data,Object[]colNames){
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        JTable table = new JTable(data,colNames);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane,BorderLayout.CENTER);
        setSize(WIDTH,HEIGHT);
        setVisible(true);
    }
    }
    
    package PersonalInfo;
    import java.sql.*;
    public class ConnectDBQuery {
    public final String DB_URL="jdbc:derby://localhost:1527/InformationDB;";
    private Connection conn;
    private String[][]tableData;
    private String[]colNames;
    public ConnectDBQuery(){
        getDatabaseConnection();
        try{
            Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                ResultSet.CONCUR_READ_ONLY);
            ResultSet resultSet = stmt.executeQuery("SELECT * FROM PersonalInfo");
            resultSet.last();
            int numRows = resultSet.getRow();
            resultSet.first();
    
            ResultSetMetaData meta = resultSet.getMetaData();
            colNames = new String[meta.getColumnCount()];
            for(int i = 0;i < meta.getColumnCount();i++){
                colNames[i]=meta.getColumnLabel(i+1);
            }
    
            tableData = new String[numRows][meta.getColumnCount()];
            for(int row = 0;row < numRows;row++){
                for(int col = 0;col < meta.getColumnCount();col++){
                    tableData[row][col]=resultSet.getString(col+1);
                }
                resultSet.next();
            }
            stmt.close();
            conn.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    private void getDatabaseConnection(){
        try{
            conn = DriverManager.getConnection(DB_URL);
        }catch(Exception ex){
            ex.printStackTrace();
            System.exit(0);
        }
    }
    
    public String[]getColumnNames(){
        return colNames;
    }
    
    public String[][]getTableData(){
        return tableData;
    }
    }
    
    package PersonalInfo;
    
    import java.sql.*;
    
    public class InfoDBQuery {
    public final String DB_URL="jdbc:derby://localhost:1527/InformationDB;";
    
    public InfoDBQuery(String firstName,String lastName,String gender,String month,String date,String year,String age){
    
        try{
            Connection conn = DriverManager.getConnection(DB_URL);
            Statement stmt = conn.createStatement();
            String sql = "INSERT INTO PersonalInfo VALUES ('" +
            firstName + "','" + lastName + "','" + gender + "','" + month + "-" + date + "-" + year + "','" + age + "')";
            stmt.executeUpdate(sql);
            stmt.close();
            conn.close();
        }catch(Exception ex){
            System.out.println("ERROR: " + ex.getMessage());
        }
    }
    
    
    }
    
    package PersonalInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class InfoDBViewer extends JFrame{
    JMenuBar menuBar;
    JMenu fileMenu;
    JMenuItem addItem;
    JMenuItem viewItem;
    JMenuItem exitItem;
    
    JPanel textPanel;
    JLabel firstNameLabel;
    JLabel lastNameLabel;
    JTextField firstNameText;
    JTextField lastNameText;
    JLabel ageLabel;
    JTextField ageText;
    
    JPanel rbuttonPanel;
    JRadioButton maleButton;
    JRadioButton femaleButton;
    
    JPanel comboPanel;
    JComboBox monthBox;
    JComboBox dateBox;
    JComboBox yearBox;
    
    String[]months = {"January","February","March","April",
            "May","June","July","August","September","October",
            "November","December"};
    
    String[]date = {"1","2","3","4","5","6","7","8","9","10","11",
            "12","13","14","15","16","17","18","19","20","21","22","23","24","25",
            "26","27","28","29","30","31"};
    
    String[]year = {"1985","1986","1987","1988","1989","1990","1991","1992","1993",
            "1994","1995","1996","1997","1998","1999","2000","2001","2002","2003",
            "2004","2005","2006","2007","2008","2009","2010","2011","2012","2013",
            "2014","2015"};
    
    JPanel buttonPanel;
    JButton submitButton;
    JButton exitButton;
    
    public InfoDBViewer(){
        setTitle("Menu System");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        buildMenuBar();
        setVisible(true);
    }
    
    private void AddItems(){
        setTitle("CoffeeDB Viewer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        buildTextFieldPanel();
        buildRadioButtonPanel();
        buildComboBoxPanel();
        buildButtonPanel();
        add(textPanel,BorderLayout.NORTH);
        add(rbuttonPanel,BorderLayout.WEST);
        add(comboPanel,BorderLayout.EAST);
        add(buttonPanel,BorderLayout.SOUTH);
    
        setVisible(true);
    }
    
    private void buildMenuBar(){
        menuBar = new JMenuBar();
        buildFileMenu();
    
        menuBar.add(fileMenu);
        setJMenuBar(menuBar);
    }
    
    private void buildFileMenu(){
        exitItem = new JMenuItem("Exit");
        exitItem.addActionListener(new ExitListener());
        addItem = new JMenuItem("Add Item");
        addItem.addActionListener(new AddListener());
        viewItem = new JMenuItem("View Item");
        viewItem.addActionListener(new ViewListener());
    
        fileMenu = new JMenu("File");
        fileMenu.add(addItem);
        fileMenu.add(viewItem);
        fileMenu.add(exitItem);
    }
    
    private class AddListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            AddItems();
        }
    }
    
    private class ViewListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            ConnectDBQuery dbQuery = new ConnectDBQuery();
            String[]colNames = dbQuery.getColumnNames();
            String[][]data = dbQuery.getTableData();
            TableFormatter table = new TableFormatter(data,colNames);
        }
    }
    
    private class ExitListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }
    }
    
    
    
    private void buildTextFieldPanel(){
        textPanel = new JPanel();
        firstNameLabel = new JLabel("First Name");
        firstNameText = new JTextField(10);
        lastNameLabel = new JLabel("Last Name");
        lastNameText = new JTextField(10);
        ageLabel = new JLabel("Age");
        ageText = new JTextField(5);
    
        textPanel.add(firstNameLabel);
        textPanel.add(firstNameText);
        textPanel.add(lastNameLabel);
        textPanel.add(lastNameText);
        textPanel.add(ageLabel);
        textPanel.add(ageText);
    
    }
    
    private void buildRadioButtonPanel(){
        rbuttonPanel = new JPanel();
        maleButton = new JRadioButton("Male",true);
        femaleButton = new JRadioButton("Female");
    
        ButtonGroup bg = new ButtonGroup();
        bg.add(maleButton);
        bg.add(femaleButton);
    
        rbuttonPanel.add(maleButton);
        rbuttonPanel.add(femaleButton);
    }
    
    private void buildComboBoxPanel(){
        comboPanel = new JPanel();
        monthBox = new JComboBox(months);
        dateBox = new JComboBox(date);
        yearBox = new JComboBox(year);
    
        comboPanel.add(monthBox);
        comboPanel.add(dateBox);
        comboPanel.add(yearBox);
    }
    
    private void buildButtonPanel(){
        buttonPanel = new JPanel();
        submitButton = new JButton("Submit");
        submitButton.addActionListener(new SubmitButtonListener());
        exitButton = new JButton("Exit");
        exitButton.addActionListener(new ExitButtonListener());
        buttonPanel.add(submitButton);
        buttonPanel.add(exitButton);
    }
    
    private class SubmitButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String firstNameStatement = firstNameText.getText();
            String lastNameStatement = lastNameText.getText();
    
            String genderStatement = "";
            if(maleButton.isSelected()){
                genderStatement = maleButton.getText();
            }else if(femaleButton.isSelected()){
                genderStatement = femaleButton.getText();
            }
    
            String monthStatement = (String)monthBox.getSelectedItem();
            String dateStatement = (String)dateBox.getSelectedItem();
            String yearStatement = (String)yearBox.getSelectedItem();
    
            String ageStatement = ageText.getText();
    
            InfoDBQuery dbQuery = new InfoDBQuery(firstNameStatement,
                    lastNameStatement,genderStatement,monthStatement,
                    dateStatement,yearStatement,ageStatement);
    
        }
    }
    
    private class ExitButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }
    }
    
    public static void main(String[]args){
        new InfoDBViewer();
    }
    }
    
    第二部分:

    package PersonalInfo;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class TableFormatter extends JFrame{
    private final int WIDTH = 600;
    private final int HEIGHT = 400;
    public TableFormatter(Object[][]data,Object[]colNames){
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        JTable table = new JTable(data,colNames);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane,BorderLayout.CENTER);
        setSize(WIDTH,HEIGHT);
        setVisible(true);
    }
    }
    
    package PersonalInfo;
    import java.sql.*;
    public class ConnectDBQuery {
    public final String DB_URL="jdbc:derby://localhost:1527/InformationDB;";
    private Connection conn;
    private String[][]tableData;
    private String[]colNames;
    public ConnectDBQuery(){
        getDatabaseConnection();
        try{
            Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                ResultSet.CONCUR_READ_ONLY);
            ResultSet resultSet = stmt.executeQuery("SELECT * FROM PersonalInfo");
            resultSet.last();
            int numRows = resultSet.getRow();
            resultSet.first();
    
            ResultSetMetaData meta = resultSet.getMetaData();
            colNames = new String[meta.getColumnCount()];
            for(int i = 0;i < meta.getColumnCount();i++){
                colNames[i]=meta.getColumnLabel(i+1);
            }
    
            tableData = new String[numRows][meta.getColumnCount()];
            for(int row = 0;row < numRows;row++){
                for(int col = 0;col < meta.getColumnCount();col++){
                    tableData[row][col]=resultSet.getString(col+1);
                }
                resultSet.next();
            }
            stmt.close();
            conn.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    private void getDatabaseConnection(){
        try{
            conn = DriverManager.getConnection(DB_URL);
        }catch(Exception ex){
            ex.printStackTrace();
            System.exit(0);
        }
    }
    
    public String[]getColumnNames(){
        return colNames;
    }
    
    public String[][]getTableData(){
        return tableData;
    }
    }
    
    package PersonalInfo;
    
    import java.sql.*;
    
    public class InfoDBQuery {
    public final String DB_URL="jdbc:derby://localhost:1527/InformationDB;";
    
    public InfoDBQuery(String firstName,String lastName,String gender,String month,String date,String year,String age){
    
        try{
            Connection conn = DriverManager.getConnection(DB_URL);
            Statement stmt = conn.createStatement();
            String sql = "INSERT INTO PersonalInfo VALUES ('" +
            firstName + "','" + lastName + "','" + gender + "','" + month + "-" + date + "-" + year + "','" + age + "')";
            stmt.executeUpdate(sql);
            stmt.close();
            conn.close();
        }catch(Exception ex){
            System.out.println("ERROR: " + ex.getMessage());
        }
    }
    
    
    }
    
    package PersonalInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class InfoDBViewer extends JFrame{
    JMenuBar menuBar;
    JMenu fileMenu;
    JMenuItem addItem;
    JMenuItem viewItem;
    JMenuItem exitItem;
    
    JPanel textPanel;
    JLabel firstNameLabel;
    JLabel lastNameLabel;
    JTextField firstNameText;
    JTextField lastNameText;
    JLabel ageLabel;
    JTextField ageText;
    
    JPanel rbuttonPanel;
    JRadioButton maleButton;
    JRadioButton femaleButton;
    
    JPanel comboPanel;
    JComboBox monthBox;
    JComboBox dateBox;
    JComboBox yearBox;
    
    String[]months = {"January","February","March","April",
            "May","June","July","August","September","October",
            "November","December"};
    
    String[]date = {"1","2","3","4","5","6","7","8","9","10","11",
            "12","13","14","15","16","17","18","19","20","21","22","23","24","25",
            "26","27","28","29","30","31"};
    
    String[]year = {"1985","1986","1987","1988","1989","1990","1991","1992","1993",
            "1994","1995","1996","1997","1998","1999","2000","2001","2002","2003",
            "2004","2005","2006","2007","2008","2009","2010","2011","2012","2013",
            "2014","2015"};
    
    JPanel buttonPanel;
    JButton submitButton;
    JButton exitButton;
    
    public InfoDBViewer(){
        setTitle("Menu System");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        buildMenuBar();
        setVisible(true);
    }
    
    private void AddItems(){
        setTitle("CoffeeDB Viewer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        buildTextFieldPanel();
        buildRadioButtonPanel();
        buildComboBoxPanel();
        buildButtonPanel();
        add(textPanel,BorderLayout.NORTH);
        add(rbuttonPanel,BorderLayout.WEST);
        add(comboPanel,BorderLayout.EAST);
        add(buttonPanel,BorderLayout.SOUTH);
    
        setVisible(true);
    }
    
    private void buildMenuBar(){
        menuBar = new JMenuBar();
        buildFileMenu();
    
        menuBar.add(fileMenu);
        setJMenuBar(menuBar);
    }
    
    private void buildFileMenu(){
        exitItem = new JMenuItem("Exit");
        exitItem.addActionListener(new ExitListener());
        addItem = new JMenuItem("Add Item");
        addItem.addActionListener(new AddListener());
        viewItem = new JMenuItem("View Item");
        viewItem.addActionListener(new ViewListener());
    
        fileMenu = new JMenu("File");
        fileMenu.add(addItem);
        fileMenu.add(viewItem);
        fileMenu.add(exitItem);
    }
    
    private class AddListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            AddItems();
        }
    }
    
    private class ViewListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            ConnectDBQuery dbQuery = new ConnectDBQuery();
            String[]colNames = dbQuery.getColumnNames();
            String[][]data = dbQuery.getTableData();
            TableFormatter table = new TableFormatter(data,colNames);
        }
    }
    
    private class ExitListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }
    }
    
    
    
    private void buildTextFieldPanel(){
        textPanel = new JPanel();
        firstNameLabel = new JLabel("First Name");
        firstNameText = new JTextField(10);
        lastNameLabel = new JLabel("Last Name");
        lastNameText = new JTextField(10);
        ageLabel = new JLabel("Age");
        ageText = new JTextField(5);
    
        textPanel.add(firstNameLabel);
        textPanel.add(firstNameText);
        textPanel.add(lastNameLabel);
        textPanel.add(lastNameText);
        textPanel.add(ageLabel);
        textPanel.add(ageText);
    
    }
    
    private void buildRadioButtonPanel(){
        rbuttonPanel = new JPanel();
        maleButton = new JRadioButton("Male",true);
        femaleButton = new JRadioButton("Female");
    
        ButtonGroup bg = new ButtonGroup();
        bg.add(maleButton);
        bg.add(femaleButton);
    
        rbuttonPanel.add(maleButton);
        rbuttonPanel.add(femaleButton);
    }
    
    private void buildComboBoxPanel(){
        comboPanel = new JPanel();
        monthBox = new JComboBox(months);
        dateBox = new JComboBox(date);
        yearBox = new JComboBox(year);
    
        comboPanel.add(monthBox);
        comboPanel.add(dateBox);
        comboPanel.add(yearBox);
    }
    
    private void buildButtonPanel(){
        buttonPanel = new JPanel();
        submitButton = new JButton("Submit");
        submitButton.addActionListener(new SubmitButtonListener());
        exitButton = new JButton("Exit");
        exitButton.addActionListener(new ExitButtonListener());
        buttonPanel.add(submitButton);
        buttonPanel.add(exitButton);
    }
    
    private class SubmitButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String firstNameStatement = firstNameText.getText();
            String lastNameStatement = lastNameText.getText();
    
            String genderStatement = "";
            if(maleButton.isSelected()){
                genderStatement = maleButton.getText();
            }else if(femaleButton.isSelected()){
                genderStatement = femaleButton.getText();
            }
    
            String monthStatement = (String)monthBox.getSelectedItem();
            String dateStatement = (String)dateBox.getSelectedItem();
            String yearStatement = (String)yearBox.getSelectedItem();
    
            String ageStatement = ageText.getText();
    
            InfoDBQuery dbQuery = new InfoDBQuery(firstNameStatement,
                    lastNameStatement,genderStatement,monthStatement,
                    dateStatement,yearStatement,ageStatement);
    
        }
    }
    
    private class ExitButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }
    }
    
    public static void main(String[]args){
        new InfoDBViewer();
    }
    }
    
    第四部分:

    package PersonalInfo;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class TableFormatter extends JFrame{
    private final int WIDTH = 600;
    private final int HEIGHT = 400;
    public TableFormatter(Object[][]data,Object[]colNames){
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        JTable table = new JTable(data,colNames);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane,BorderLayout.CENTER);
        setSize(WIDTH,HEIGHT);
        setVisible(true);
    }
    }
    
    package PersonalInfo;
    import java.sql.*;
    public class ConnectDBQuery {
    public final String DB_URL="jdbc:derby://localhost:1527/InformationDB;";
    private Connection conn;
    private String[][]tableData;
    private String[]colNames;
    public ConnectDBQuery(){
        getDatabaseConnection();
        try{
            Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                ResultSet.CONCUR_READ_ONLY);
            ResultSet resultSet = stmt.executeQuery("SELECT * FROM PersonalInfo");
            resultSet.last();
            int numRows = resultSet.getRow();
            resultSet.first();
    
            ResultSetMetaData meta = resultSet.getMetaData();
            colNames = new String[meta.getColumnCount()];
            for(int i = 0;i < meta.getColumnCount();i++){
                colNames[i]=meta.getColumnLabel(i+1);
            }
    
            tableData = new String[numRows][meta.getColumnCount()];
            for(int row = 0;row < numRows;row++){
                for(int col = 0;col < meta.getColumnCount();col++){
                    tableData[row][col]=resultSet.getString(col+1);
                }
                resultSet.next();
            }
            stmt.close();
            conn.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    private void getDatabaseConnection(){
        try{
            conn = DriverManager.getConnection(DB_URL);
        }catch(Exception ex){
            ex.printStackTrace();
            System.exit(0);
        }
    }
    
    public String[]getColumnNames(){
        return colNames;
    }
    
    public String[][]getTableData(){
        return tableData;
    }
    }
    
    package PersonalInfo;
    
    import java.sql.*;
    
    public class InfoDBQuery {
    public final String DB_URL="jdbc:derby://localhost:1527/InformationDB;";
    
    public InfoDBQuery(String firstName,String lastName,String gender,String month,String date,String year,String age){
    
        try{
            Connection conn = DriverManager.getConnection(DB_URL);
            Statement stmt = conn.createStatement();
            String sql = "INSERT INTO PersonalInfo VALUES ('" +
            firstName + "','" + lastName + "','" + gender + "','" + month + "-" + date + "-" + year + "','" + age + "')";
            stmt.executeUpdate(sql);
            stmt.close();
            conn.close();
        }catch(Exception ex){
            System.out.println("ERROR: " + ex.getMessage());
        }
    }
    
    
    }
    
    package PersonalInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class InfoDBViewer extends JFrame{
    JMenuBar menuBar;
    JMenu fileMenu;
    JMenuItem addItem;
    JMenuItem viewItem;
    JMenuItem exitItem;
    
    JPanel textPanel;
    JLabel firstNameLabel;
    JLabel lastNameLabel;
    JTextField firstNameText;
    JTextField lastNameText;
    JLabel ageLabel;
    JTextField ageText;
    
    JPanel rbuttonPanel;
    JRadioButton maleButton;
    JRadioButton femaleButton;
    
    JPanel comboPanel;
    JComboBox monthBox;
    JComboBox dateBox;
    JComboBox yearBox;
    
    String[]months = {"January","February","March","April",
            "May","June","July","August","September","October",
            "November","December"};
    
    String[]date = {"1","2","3","4","5","6","7","8","9","10","11",
            "12","13","14","15","16","17","18","19","20","21","22","23","24","25",
            "26","27","28","29","30","31"};
    
    String[]year = {"1985","1986","1987","1988","1989","1990","1991","1992","1993",
            "1994","1995","1996","1997","1998","1999","2000","2001","2002","2003",
            "2004","2005","2006","2007","2008","2009","2010","2011","2012","2013",
            "2014","2015"};
    
    JPanel buttonPanel;
    JButton submitButton;
    JButton exitButton;
    
    public InfoDBViewer(){
        setTitle("Menu System");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        buildMenuBar();
        setVisible(true);
    }
    
    private void AddItems(){
        setTitle("CoffeeDB Viewer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        buildTextFieldPanel();
        buildRadioButtonPanel();
        buildComboBoxPanel();
        buildButtonPanel();
        add(textPanel,BorderLayout.NORTH);
        add(rbuttonPanel,BorderLayout.WEST);
        add(comboPanel,BorderLayout.EAST);
        add(buttonPanel,BorderLayout.SOUTH);
    
        setVisible(true);
    }
    
    private void buildMenuBar(){
        menuBar = new JMenuBar();
        buildFileMenu();
    
        menuBar.add(fileMenu);
        setJMenuBar(menuBar);
    }
    
    private void buildFileMenu(){
        exitItem = new JMenuItem("Exit");
        exitItem.addActionListener(new ExitListener());
        addItem = new JMenuItem("Add Item");
        addItem.addActionListener(new AddListener());
        viewItem = new JMenuItem("View Item");
        viewItem.addActionListener(new ViewListener());
    
        fileMenu = new JMenu("File");
        fileMenu.add(addItem);
        fileMenu.add(viewItem);
        fileMenu.add(exitItem);
    }
    
    private class AddListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            AddItems();
        }
    }
    
    private class ViewListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            ConnectDBQuery dbQuery = new ConnectDBQuery();
            String[]colNames = dbQuery.getColumnNames();
            String[][]data = dbQuery.getTableData();
            TableFormatter table = new TableFormatter(data,colNames);
        }
    }
    
    private class ExitListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }
    }
    
    
    
    private void buildTextFieldPanel(){
        textPanel = new JPanel();
        firstNameLabel = new JLabel("First Name");
        firstNameText = new JTextField(10);
        lastNameLabel = new JLabel("Last Name");
        lastNameText = new JTextField(10);
        ageLabel = new JLabel("Age");
        ageText = new JTextField(5);
    
        textPanel.add(firstNameLabel);
        textPanel.add(firstNameText);
        textPanel.add(lastNameLabel);
        textPanel.add(lastNameText);
        textPanel.add(ageLabel);
        textPanel.add(ageText);
    
    }
    
    private void buildRadioButtonPanel(){
        rbuttonPanel = new JPanel();
        maleButton = new JRadioButton("Male",true);
        femaleButton = new JRadioButton("Female");
    
        ButtonGroup bg = new ButtonGroup();
        bg.add(maleButton);
        bg.add(femaleButton);
    
        rbuttonPanel.add(maleButton);
        rbuttonPanel.add(femaleButton);
    }
    
    private void buildComboBoxPanel(){
        comboPanel = new JPanel();
        monthBox = new JComboBox(months);
        dateBox = new JComboBox(date);
        yearBox = new JComboBox(year);
    
        comboPanel.add(monthBox);
        comboPanel.add(dateBox);
        comboPanel.add(yearBox);
    }
    
    private void buildButtonPanel(){
        buttonPanel = new JPanel();
        submitButton = new JButton("Submit");
        submitButton.addActionListener(new SubmitButtonListener());
        exitButton = new JButton("Exit");
        exitButton.addActionListener(new ExitButtonListener());
        buttonPanel.add(submitButton);
        buttonPanel.add(exitButton);
    }
    
    private class SubmitButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String firstNameStatement = firstNameText.getText();
            String lastNameStatement = lastNameText.getText();
    
            String genderStatement = "";
            if(maleButton.isSelected()){
                genderStatement = maleButton.getText();
            }else if(femaleButton.isSelected()){
                genderStatement = femaleButton.getText();
            }
    
            String monthStatement = (String)monthBox.getSelectedItem();
            String dateStatement = (String)dateBox.getSelectedItem();
            String yearStatement = (String)yearBox.getSelectedItem();
    
            String ageStatement = ageText.getText();
    
            InfoDBQuery dbQuery = new InfoDBQuery(firstNameStatement,
                    lastNameStatement,genderStatement,monthStatement,
                    dateStatement,yearStatement,ageStatement);
    
        }
    }
    
    private class ExitButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }
    }
    
    public static void main(String[]args){
        new InfoDBViewer();
    }
    }
    
    很抱歉,我的代码太乱了,我的解释也很简单,到目前为止,我倾向于忘记编程术语,但希望我能有所改进。

    问题1)

    您需要手动更改(或构建日期组合框)将侦听器添加到月份组合框

         monthBox.addItemListener(new ItemListener() {
    
            @Override
            public void itemStateChanged(ItemEvent e) {
                //Set you days
            }
        });
    
    问题2)无法真正遵循您的代码,但
    System.exit()
    ,将关闭应用程序
    setVisible(false)
    将隐藏,如果您想再次看到它,则需要执行
    setVisible(true)

    问题3)如果要在菜单中显示表格,请使用JMenu并向其中添加JMenuItems(表格的1列?)

    我建议您在
    JFrame
    上使用,然后使用
    JPanel
    将其添加到显示表格的
    JFrame
    中,如果需要添加,您可以打开
    JDialog
    ,用户可以在其中输入数据,然后在保存时关闭
    JDialog
    并更新表格

    例如,如果我选择二月,则日期最多只能是28

    别忘了闰年的计算。您可能需要考虑日期组件,如JXDateChooser或Jalnal.

    但我注意到当你点击退出按钮时,它会关闭所有东西

    一个应用程序应该只有一个JFrame。其他子窗口应该是模态JDialog。关闭对话框时,仅对话框关闭,框架保持打开状态

    String sql = "INSERT INTO PersonalInfo VALUES ('" +  firstName + "','" + lastName + "','" + gender + "','" + month + "-" + date + "-" + year + "','" + age + "')";
    
    不要这样构建SQL,尝试匹配文本太容易出错

    相反,您可以使用
    PreparedStatement
    ,这使SQL语句更易于编码和维护

    String sql = "INSERT INTO PersonalInfo VALUES (?, ?, ?, ?, ?)";
    
    PreparedStatement stmt = connection.prepareStatement(sql);
    
    stmt.setString( 1, firstName );
    stmt.setString( 2, lastName );
    stmt.setString( 3, gender );
    stmt.setString( 4, month + "-" + date + "-" + year );
    stmt.setInt( 5, age );
    
    stmt.executeUpdate();
    
    现在PreparedStatement将处理正确的语法