Java 将结果集存储到数组中并在JComboBox中列出

Java 将结果集存储到数组中并在JComboBox中列出,java,arrays,swing,jcombobox,resultset,Java,Arrays,Swing,Jcombobox,Resultset,我正在从数据库中获取一个数据列表,并首先将它们存储到一个结果集。稍后,我将把结果集存储到一个数组中,然后将它们绘制到一个梳子框中。问题是我无法事先确定数组的长度。如何才能做到这一点 import java.sql.SQLException; import javax.swing.JComboBox; import javax.swing.JFrame; public class test extends JFrame { public static void main(String[

我正在从数据库中获取一个数据列表,并首先将它们存储到一个结果集。稍后,我将把结果集存储到一个数组中,然后将它们绘制到一个梳子框中。问题是我无法事先确定数组的长度。如何才能做到这一点

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);
    }
}
通过使用这个…我得到以下结果

编辑: 主经理

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);

    }
}
在这里,我声明DefaultComboxModel和JComboBox的变量。稍后,我在构造函数wconstruct处更新模型

当我点击“分配”按钮时,它将调用另一个名为-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);

}
btnaSign的ActionListener

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);

    }
}
问题是我无法事先确定数组的长度

没错。不要使用数组

只需将结果集中的数据直接加载到
ComboBoxModel
。您可以使用
defaultcomboxmodel
并使用
addElement(…)
方法加载项

不要在不同的对象中保留对数据的多个引用

问题是我无法事先确定数组的长度

没错。不要使用数组

只需将结果集中的数据直接加载到
ComboBoxModel
。您可以使用
defaultcomboxmodel
并使用
addElement(…)
方法加载项


不要在不同的对象中保留对数据的多个引用

改用
数组列表
,然后在完成后将其转换为数组

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()]));
查看更多详细信息

例如…

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);
        }

    }

}


改为使用
ArrayList
,然后在完成后将其转换为数组

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()]));
查看更多详细信息

例如…

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);
        }

    }

}