Reputation: 63
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();
}
}
Upvotes: 0
Views: 982
Reputation: 347184
The combination of null
layouts and the timing of the setVisible
call are working against you.
First, don't use null
layouts, they produce more problems than they're worth, second make setVisble
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...
bx = new JComboBox();
bx.setBounds(240, 20, 200, 20);
add(bx);
try {
Vector v = new Vector();
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();
while (rs.next()) {
String s = rs.getString(1);
v.add(s);
}
bx.setModel(new DefaultComboBoxModel(v));
} catch (Exception ex) {
System.out.println(ex);
JOptionPane.showMessageDialog(this, "I have failed");
}
Take a look at Laying Out Components Within a Container for more details
Upvotes: 1
Reputation: 22972
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.
Upvotes: 2
Reputation: 21961
You should initialize and add JComboBox
outside of try block. Because, if any database exception have occur than JComboBox
will not be added or be visible. And better to create the JComboBox
at start-up and populate it when the DB query is resolved.
// Write these line, outside of try block.
bx = new JComboBox(v);
bx.setBounds(240, 20, 200, 20);
add(bx);
Upvotes: 0