Search code examples
javaarraysswingjcomboboxresultset

Storing ResultSet into Array and list them out in JComboBox


I am getting a list of data from database and stored them into a ResultSet first..later on I will store the resultset into an array and then portrait them into a comb box. Problem is I couldn't determine the length for the array beforehand..how can I make it happen?

import java.sql.SQLException;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class test extends JFrame {

    public static void main(String[] args) throws SQLException {
        DBConn db = new DBConn();

        JFrame frame = new JFrame();
        JComboBox cBoxTaskID = null;

        frame.setSize(500, 300);
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        int x = 0;
        String vSQL = "select taskid from tbltask where status = 'new'";
        db.rs = db.GetRecordsetRS(vSQL);

        String[] dataTaskIDAdmin = new String[100];

        try {
            while (db.rs.next()) {
                dataTaskIDAdmin[x++] = db.rs.getString("taskid");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        cBoxTaskID = new JComboBox(dataTaskIDAdmin);
        cBoxTaskID.setBounds(50, 50, 200, 20);

        frame.add(cBoxTaskID);
    }
}

By using this...I get the following result Result

EDIT: MainManager

public class MainManager implements ActionListener{

    DBConn db = new DBConn();

    WindowConstruct wconstruct;
    IntWindowConstruct internal;
    TableConstruct tblConstruct;

    static DefaultComboBoxModel dataTaskID = new DefaultComboBoxModel();
    static DefaultComboBoxModel dataEngineer = new DefaultComboBoxModel();

    static JComboBox cBoxTaskID = new JComboBox();
    static JComboBox cBoxEngineer = new JComboBox();

    public MainManager() {

        wconstruct = new WindowConstruct("..:: Manager's Helpdesk Main Page ::..", 1500, 800, false, null,"manager");

        wconstruct.btnNew.addActionListener(this);
        wconstruct.btnAssign.addActionListener(this);
        wconstruct.btnLogout.addActionListener(this);

        cBoxTaskID.setModel(dataTaskID);
        cBoxEngineer.setModel(dataEngineer);

    }
}

At here, I declare the variables for DefaultComboBoxModel and JComboBox. Later on I update the model at the constructor - wconstruct.

When I cliked on the "Assign" button, it will call another constructor called - IntWindowConstruct.

if (userType.equalsIgnoreCase("manager") && btnType.equalsIgnoreCase("assign")) {

    btnSubmitAssign.setBounds(100, 140, 100, 20);
    btnCancelAssign.setBounds(300, 140, 100, 20);

    lblTask.setBounds(50, 50, 100, 20);
    lblEngineer.setBounds(50, 90, 100, 20);

    // cBoxTaskID = new JComboBox(MainManager.dataTaskID);
    MainManager.cBoxTaskID.setBounds(160, 50, 250, 20);

    // cBoxEngineer = new JComboBox(MainManager.dataEngineer);
    MainManager.cBoxEngineer.setBounds(160, 90, 250, 20);

    this.add(MainManager.cBoxTaskID);
    this.add(MainManager.cBoxEngineer);
    this.add(btnSubmitAssign);
    this.add(btnCancelAssign);
    this.add(lblTask);
    this.add(lblEngineer);

}

ActionListener for btnAssign

if (src == wconstruct.btnAssign) {
    if (Global.intNewAssign == false) {
        int x = 0;
        String vSQL = "select taskid from tbltask where status = 'new'";
        db.rs = db.GetRecordsetRS(vSQL);

        try {
            while (db.rs.next()) {
                dataTaskID.addElement(db.rs.getString("taskid"));
            }
        } catch (SQLException err) {
            err.printStackTrace();
        }

        int y = 0;
        String vSQL1 = "select username from tblusermaster where usertype='engineer' and status='active'";
        db.rs1 = db.GetRecordsetRS(vSQL1);

        try {
            while (db.rs1.next()) {
                dataEngineer.addElement(db.rs1.getString("username"));
            }
        } catch (SQLException err) {
            err.printStackTrace();
        }

        internal = new IntWindowConstruct("Manager's Assign task", 500, 250, null, "manager", "assign");

        internal.btnSubmitAssign.addActionListener(this);
        internal.btnCancelAssign.addActionListener(this);

        wconstruct.panelIntWin.add(internal);

        Global.intNewAssign = true;

    } else {
        showMessageDialog(null,
                    "Assign task's window has been opened. Kindly please close it before clicking this button.",
                    "Error", JOptionPane.ERROR_MESSAGE);

    }
}

Solution

  • Use an ArrayList instead and then convert it to an array when you're done...

    List<String> dataTaskIDAdmin = new ArrayList<>(100);
    
    try{
    
        while(db.rs.next()){
    
            dataTaskIDAdmin.add(db.rs.getString("taskid"));
    
        }
    
    }catch(SQLException e){
    
        e.printStackTrace();
    
    }
    
    cBoxTaskID = new JComboBox(dataTaskIDAdmin.toArray(new String[dataTaskIDAdmin.size()]));
    

    Or use a DefaultComboBoxModel directly...

    DefaultComboBoxModel model = new DefaultComboBoxModel();
    
    try{
    
        while(db.rs.next()){
    
            model.addElement(db.rs.getString("taskid"));
    
        }
    
    }catch(SQLException e){
    
        e.printStackTrace();
    
    }
    
    cBoxTaskID = new JComboBox(model);
    

    Have a look at How to Use Combo Boxes for more details...

    For example...

    ComboBox

    import java.awt.EventQueue;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Random;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class TestComboBox {
    
        public static void main(String[] args) {
            new TestComboBox();
        }
    
        public TestComboBox() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(new TestPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            private JComboBox comboBox;
            private JButton update;
    
            public TestPane() {
                setLayout(new GridBagLayout());
                update = new JButton("Update");
                comboBox = new JComboBox();
    
                update.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        updateCombo();
                    }
                });
    
                updateCombo();
    
                add(comboBox);
                add(update);
            }
    
            protected void updateCombo() {
                DefaultComboBoxModel model = new DefaultComboBoxModel();
                Random rnd = new Random();
                for (int index = 0; index < 10 + rnd.nextInt(90); index++) {
                    model.addElement(rnd.nextInt(1000));
                }
                comboBox.setModel(model);
            }
    
        }
    
    }
    

    Updated

    int y = 0;
    String vSQL1 = "select username from tblusermaster where usertype='engineer' and status='active'";
    db.rs1 = db.GetRecordsetRS(vSQL1);
    
    dataEngineer = new DefaultComboBoxModel();
    try{
    
        while(db.rs1.next()){
    
            dataEngineer.addElement(db.rs1.getString("username"));
    
        }
    
    }catch(SQLException err){
    
        err.printStackTrace();
    
    }
    cBoxEngineer.setModel(dataEngineer);