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é.
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
hahahaha ... vraiment? –