JCombobox未显示

时间:2014-06-06 06:06:36

标签: java database oracle swing jcombobox

我使用以下代码通过使用JCombobox从数据库中选择他的用户名来显示特定用户的详细信息。组合框用于列出表中的用户名。 但是当我运行代码时,组合框不可见。 (虽然没有错误)。 如果有人告诉代码错误会有所帮助。提前谢谢。

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

3 个答案:

答案 0 :(得分:1)

只需将setVisible(true)放在构造函数的末尾。

完全同意MadProgrammer更好地使用特定布局而不是为所有元素设置边界。

假设您从Oracle数据库获取了正确的数据。

答案 1 :(得分:1)

null布局与setVisible通话时间的组合对您不利。

首先,不要使用null布局,它们产生的问题多于它们的价值,如果可以,请在构建窗口后进行最后一次调用setVisble

我还会避免将数据检索的错误状态与UI元素的构造混合在一起,例如,在代码中,如果由于某种原因数据检索失败,组合框将永远不会显示,个人,更好提出一个空的组合框和一个错误,例如......

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

请查看Laying Out Components Within a Container了解详情

答案 2 :(得分:0)

您应该在try块之外初始化并添加JComboBox。因为,如果发生任何数据库异常,则不会添加JComboBox或显示JComboBox。最好在启动时创建 // Write these line, outside of try block. bx = new JComboBox(v); bx.setBounds(240, 20, 200, 20); add(bx); 并在解析数据库查询时填充它。

{{1}}