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