2012-12-04 60 views
0

我想用swing创建自定义组件。另外我想连接数据库到那些组件。摆动自定义组件

我想要做什么,

我想创建一个自定义JComboBox。该组合框名称是仓库。数据库中的所有仓库都应绑定到该组合框。

当我设计一个表单时,我可以使用该组合框作为仓库。当我运行程序时,所有仓库都会自动加载到组合中。因为该组合具有加载仓库的内部机制。 (我怎么写那个东西?)

我该怎么做?

+3

通过不使用自定义的JComboBox而是使用实用工厂方法通过使用JComboBox的可用API来自定义它来构造这样的组合框(或其模型)。另请注意,数据库连接和Swing组件不应该组合在同一个线程中(请参见[并发性](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)教程) – Robin

+0

Focus关于Swing组件的模型容量。您不需要自定义组件,因为您需要自定义模型。您可能还想看看[JGoodies Bindings](http://www.jgoodies.com/freeware/libraries/binding/)API – MadProgrammer

回答

1

我已经做了一个类似的事情与SQL数据库的工作。 使用需要使用ResultSet接口运行查询的数据库以及Statement类来创建语句。

public void makeCombo() throws SQLException{ 
public JComboBox warehouse = new JComboBox();   
try{ 
      Connection conn = Connect.getConnection(); 
      String query = "Select ?? FROM ??"; 
      Statement stmt = conn.createStatement(); 
      ResultSet rs = stmt.executeQuery(query); 
      if (rs!=null){ 
       while (rs.next()){ 
        String name = rs.getString(1); 
        warehouse.addItem(name); 
       } 

      } 
      else{ 
       System.err.println ("Empty combo"); 
       warehouse.addItem("Empty Combo"); 
      } 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 

    } 

这应该使用查询结果填充仓库组合。

+1

此示例在EDT上执行数据库查询,或访问工作者上的Swing组件线。他们都不是一个好主意 – Robin

+0

我觉得这是一个很好的学习起点。但是,我明白你的意思。只是分享我的经验。 – Nosheen

+0

我认为这对成功我的目标会更好。谢谢 – mtchinthaka