2017-06-03 55 views
0

我想为国家和城市创建两个下拉列表。因此,如果用户从下拉列表中选择一个国家,则应该自动刷新另一个下拉列表以显示其相应的城市。GUI中国家和城市的动态列表

public void fillCombo(){ 
     String sql = " select * from sallytimes.table_name " ; 
     try { 
      ps = con.prepareStatement(sql); 
      rs = ps.executeQuery(sql); 

      while (rs.next()){ 
       jComboBox_Country.addItem(rs.getString("_id")); 
       jComboBox_City.addItem(rs.getString("city"));  
      } 
     } catch (SQLException ex) { 
      Logger.getLogger(Location.class.getName()).log(Level.SEVERE, null, ex); 
     } 
} 

我该如何处理?

+0

我觉得很有意思你的开场白是怎么完全一样,在这个论坛的第一篇文章,从2010年:https://www.java-forums.org/new-java/26492-dynamic-list-country- city.html – Ray

+0

haha​​haha ...真的吗? –

回答

1

你需要一个ActionListener添加到第一个组合框,当一个项目被选中来执行操作。在ActionListener中,您想用新数据替换第二个组合框的模型。

喜欢的东西:

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.plaf.basic.*; 

public class ComboBoxTwo extends JPanel implements ActionListener 
{ 
    private JComboBox<String> mainComboBox; 
    private JComboBox<String> subComboBox; 
    private Hashtable<String, String[]> subItems = new Hashtable<String, String[]>(); 

    public ComboBoxTwo() 
    { 
     String[] items = { "Select Item", "Color", "Shape", "Fruit" }; 
     mainComboBox = new JComboBox<String>(items); 
     mainComboBox.addActionListener(this); 

     // prevent action events from being fired when the up/down arrow keys are used 
     mainComboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); 
     add(mainComboBox); 

     // Create sub combo box with multiple models 

     subComboBox = new JComboBox<String>(); 
     subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4 
     add(subComboBox); 

     JButton arrow = SwingUtils.getDescendantOfType(JButton.class, subComboBox, "Text", ""); 
     Dimension d = arrow.getPreferredSize(); 
     System.out.println(arrow.getClass()); 
     System.out.println(d); 
     d.width = 35; 
     arrow.setPreferredSize(d); 

     String[] subItems1 = { "Select Color", "Red", "Blue", "Green" }; 
     subItems.put(items[1], subItems1); 

     String[] subItems2 = { "Select Shape", "Circle", "Square", "Triangle" }; 
     subItems.put(items[2], subItems2); 

     String[] subItems3 = { "Select Fruit", "Apple", "Orange", "Banana" }; 
     subItems.put(items[3], subItems3); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     String item = (String)mainComboBox.getSelectedItem(); 
     Object o = subItems.get(item); 

     if (o == null) 
     { 
      subComboBox.setModel(new DefaultComboBoxModel()); 
     } 
     else 
     { 
      subComboBox.setModel(new DefaultComboBoxModel((String[])o)); 
     } 
    } 

    private static void createAndShowUI() 
    { 
     try 
     { 
//   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } 
     catch (Exception e) { } 
     JFrame frame = new JFrame("SSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new ComboBoxTwo()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

所以,你会需要修改的ActionListener的代码即可获得基于所选国家数据库中的城市。

+0

实际上我使用MY_SQL数据库连接国家和城市组合框。 现在,我该如何解决这个问题? –

+0

@muhammadsalman,'我该如何解决这个问题?' - 什么问题?您已获得工作的代码演示了如何当第一组合框中的项目更改更新第二个组合框。所以你需要做的就是从你的数据库中获取一个城市列表。只有你知道你的数据库的结构,所以我不能帮你的SQL。 – camickr