如何使用netbeans 8.2中的JComboBox下拉列表创建更新按钮?

时间:2016-01-26 11:09:48

标签: java swing

我想为下拉列表创建一个更新按钮,该列表从netbeans中获取数据库中的数据。尝试过这种方法,但无法使其发挥作用。有什么建议?非常感谢。

public class ViewProduct extends javax.swing.JFrame {
 ResultSet rs;
 PreparedStatement pst;
 Connection conn;    
 final void FillList(){
 try{   
        //establish connection to table
        String url = "jdbc:derby://localhost:1527/ProductInformation";
        String username = "admin1";
        String password = "admin1";

        Connection conn = DriverManager.getConnection(url,username,password);
        Statement stat = conn.createStatement();
        // get data from table in sql database
        String Query = "SELECT * FROM VIEWPRODUCT";
        ResultSet rs = stat.executeQuery(Query);
        //
        DefaultListModel DLM = new DefaultListModel();

        while(rs.next()){

        JList list = new JList();
        JComboBox ProductID_dropdown = new JComboBox();
        DefaultComboBoxModel listModel = new DefaultComboBoxModel();

        list.setModel(listModel);
        ProductID_dropdown.setModel(listModel);
        }

}catch(SQLException ex){
    JOptionPane.showMessageDialog(null, ex.toString());
}

1 个答案:

答案 0 :(得分:0)

您的代码中有一些不正确或缺失的内容。例如,你没有GUI。

由于我不知道您的项目或数据库的确切结构,我必须即兴发挥并为您提供伪代码方法。 你将不得不改变和配置我在这里展示的几件事。

首先,在方法之外创建一个JComboBox,并将其添加到像JPanel这样的容器中:

JPanel pane = new JPanel();
JComboBox productID_dropdown = new JComboBox();
JButton btn_updateViewProducts = new JButton("Update Results");

此处添加了用于更新结果的按钮,其中包含ActionListener,"侦听"当有人点击按钮时。 通常您要检索ResultSet并将其内容放入变量中,例如this example

// ActionListener for the button
btn_updateViewProducts.add(new ActionListener{
    @Override
    // When the button is clicked...
    public void actionPerformed(ActionEvent arg0) {
        // ... get the results out of your database (here it's an example database! 
        // Configure for your own one)
        ResultSet rs = stat.executeQuery(Query);
        while(rs.next()){
            // "de-construct" every result of the ResultList into variables
            String query = "select COF_NAME, SUP_ID, PRICE, " + "SALES, TOTAL " + "from " + dbName + ".COFFEES";
            String coffeeName = rs.getString("COF_NAME");
            int supplierID = rs.getInt("SUP_ID");
            float price = rs.getFloat("PRICE");
            int sales = rs.getInt("SALES");
            int total = rs.getInt("TOTAL");
            System.out.println(coffeeName + "\t" + supplierID + "\t" + price + "\t" + sales + "\t" + total);

            // Put items into JComboBox
            productID_dropdown.addItem(coffeeName);
        }        
    }
});

// Add the now filled JComboBox to the pane
pane.add(productID_dropdown);

您应该考虑的其他问题:

  • 缺少GUI
  • 方法FillList是最终的,这看起来很不寻常,这背后的原因是什么?方法中的final意味着它不能被子类覆盖,这需要吗?
  • FillList是一种方法,由于编码惯例,应该在开头写一个小写字母,同样适用于ProductID_dropdown(编码惯例)
  • 大多数情况下,对rs使用ResultSet之类的短变量是可以的,但如果你的项目变大,那么记住所有这些变量就会变得更加困难。更好:让他们告诉你,他们是什么。而不是rs - > resultSetViewProduct或类似。
  • PreparedStatement pst从未使用

我希望这会有所帮助。 :)