2017-06-03 1 views
0

Je veux créer deux liste déroulante pour le pays et la ville. Ainsi, si l'utilisateur sélectionne un pays dans la liste déroulante, l'autre liste déroulante doit être automatiquement actualisée pour afficher les villes correspondantes.Liste dynamique pour le pays et la ville dans 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); 
     } 
} 

Comment puis-je progresser?

+0

Je trouve intéressant que votre déclaration d'ouverture soit exactement la même que la première publication dans ce forum, à partir de 2010: https://www.java-forums.org/new-java/26492-dynamic-list-country- city.html – Ray

+0

hahahaha ... vraiment? –

Répondre

1

Vous devez ajouter un ActionListener à la première zone de liste déroulante pour effectuer une action lorsqu'un élément est sélectionné. Dans ActionListener, vous voulez remplacer le modèle de la deuxième zone de liste déroulante par les nouvelles données.

Quelque chose comme:

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

Donc, vous devez modifier le code dans le ActionListener pour obtenir les villes de la base de données en fonction du pays sélectionné.

+0

effectivement je me connecte le pays et la ville combo-box avec la base de données MY_SQL. maintenant, comment puis-je résoudre ce problème? –

+0

@muhammadsalman, 'comment je peux résoudre ce problème?' - quel problème ??? Vous avez reçu un code de travail indiquant comment mettre à jour la deuxième zone de liste déroulante lorsque l'élément de la première zone de liste modifiable est modifié. Donc, tout ce que vous devez faire est d'obtenir une liste de villes de votre base de données. Vous seul connaissez la structure de votre base de données, donc je ne peux pas vous aider avec le SQL. – camickr