I am using the following code to display the particular user's details by using JCombobox to select his username from the database. The combo box is to list the user names from the table. But the combo box is not visible when i run the code. (no error though). It would be helpful if someone tell whats wrong with code. Thanks in advance.
public class EmpSearchApp extends JFrame implements ActionListener {
JLabel l, l1, l2, l3, l4, l5, l6, l7, l8;
JButton b;
JTextField tf1, tf2, tf3, tf4, tf5, tf6, tf7;
JComboBox bx;
String str;
EmpSearchApp() {
setVisible(true);
setSize(700, 700);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("USER DATA");
l = new JLabel("Select Name:");
b = new JButton("Submit");
tf1 = new JTextField();
tf2 = new JTextField();
tf3 = new JTextField();
tf4 = new JTextField();
tf5 = new JTextField();
tf6 = new JTextField();
tf7 = new JTextField();
l.setBounds(20, 20, 200, 20);
b.setBounds(50, 50, 150, 30);
add(l);
add(b);
tf1.setEditable(false);
tf2.setEditable(false);
tf3.setEditable(false);
tf4.setEditable(false);
tf5.setEditable(false);
tf6.setEditable(false);
tf7.setEditable(false);
b.addActionListener(this);
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.45:1521:orcl", "gemsexam", "gems123");
PreparedStatement ps = con.prepareStatement("select uname from logf");
ResultSet rs = ps.executeQuery();
Vector v = new Vector();
while (rs.next()) {
String s = rs.getString(1);
v.add(s);
}
bx = new JComboBox(v);
bx.setBounds(240, 20, 200, 20);
add(bx);
} catch (Exception ex) {
System.out.println(ex);
}
}
public void actionPerformed(ActionEvent e) {
showData();
}
public void showData() {
JFrame f1 = new JFrame();
f1.setVisible(true);
f1.setSize(500, 500);
f1.setLayout(null);
f1.setTitle("USER DATA");
l5 = new JLabel("Displaying Data:");
l5.setForeground(Color.red);
l5.setFont(new Font("Serif", Font.BOLD, 20));
l1 = new JLabel("Name:");
l2 = new JLabel("Contact:");
l3 = new JLabel("email:");
l4 = new JLabel("qual:");
l6 = new JLabel("Tech:");
l7 = new JLabel("status");
l8 = new JLabel("address");
l5.setBounds(100, 50, 300, 30);
l1.setBounds(20, 110, 200, 20);
l2.setBounds(20, 140, 200, 20);
l3.setBounds(20, 170, 200, 20);
l4.setBounds(20, 200, 200, 20);
l6.setBounds(20, 230, 200, 20);
l7.setBounds(20, 260, 200, 20);
l8.setBounds(20, 290, 200, 20);
tf1.setBounds(240, 110, 200, 20);
tf2.setBounds(240, 140, 200, 20);
tf3.setBounds(240, 170, 200, 20);
tf4.setBounds(240, 200, 200, 20);
tf5.setBounds(240, 230, 200, 20);
tf6.setBounds(240, 260, 200, 20);
tf7.setBounds(240, 290, 200, 20);
f1.add(l5);
f1.add(l1);
f1.add(tf1);
f1.add(l2);
f1.add(tf2);
f1.add(l3);
f1.add(tf3);
f1.add(l4);
f1.add(tf4);
f1.add(l6);
f1.add(tf5);
f1.add(l7);
f1.add(tf6);
f1.add(l8);
f1.add(tf7);
str = (String) bx.getSelectedItem();
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.45:1521:orcl", "gemsexam", "gems123");
PreparedStatement ps = con.prepareStatement("select * from logf where uname=?");
ps.setString(1, str);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
tf1.setText(rs.getString(1));
tf2.setText(rs.getString(2));
tf3.setText(rs.getString(3));
tf4.setText(rs.getString(4));
tf5.setText(rs.getString(4));
tf6.setText(rs.getString(4));
tf7.setText(rs.getString(4));
}
} catch (Exception ex) {
System.out.println(ex);
}
}
public static void main(String arr[]) {
new EmpSearchApp();
}
}
Just put
setVisible(true)
at the end of constructor.Completely agree with
MadProgrammer
that better to use specific layout rather than setting bounds for all the elements.Assuming You are getting proper data from Oracle Database.
You should initialize and add
JComboBox
outside of try block. Because, if any database exception have occur thanJComboBox
will not be added or be visible. And better to create theJComboBox
at start-up and populate it when the DB query is resolved.The combination of
null
layouts and the timing of thesetVisible
call are working against you.First, don't use
null
layouts, they produce more problems than they're worth, second makesetVisble
the last call you make after you construct the window if you can.I would also avoid mixing the error state of your data retrieval with the construction of your UI elements, for example, in your code, if for some reason the data retrieval fails, the combobox will never be shown, personally, better to present an empty combobox and an error, for example...
Take a look at Laying Out Components Within a Container for more details