同步组合框Java Swing



我想在JavaSwing中创建同步的组合框。当我选择一个省份时,kabupaten(地区)组合框将包含所选省份的所有地区。但是有一个问题。地区组合框只选择省组合框的第一个条目,当我在省组合框中选择另一个条目时不改变。我需要做什么才能得到完全同步的组合框?TIA。

public void getProvince() {
DBConnection dBConnection = new DBConnection();
dBConnection.connection();
Statement statement = null;
try {
statement = dBConnection.con.createStatement();
String sql = "SELECT * FROM provinsi";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
String provinceName = rs.getString("nama");
String provinceId = rs.getString("id");
provinsiCombo.addItem(provinceId);
}
dBConnection.con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Gagal Terhubung");
}
}
public void getKabupaten() {
DBConnection dBConnection = new DBConnection();
dBConnection.connection();
Statement statement = null;
try {
statement = dBConnection.con.createStatement();
String sql = "SELECT * FROM kabupaten WHERE id_prov = '"
+ provinsiCombo.getSelectedItem()
+ "'";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
String kabupaten = rs.getString("nama");
kabupatenCombo.addItem(kabupaten);
}
dBConnection.con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Gagal Terhubung");
}
}

如果您希望根据省份组合框的值动态加载值到地区组合框,则需要使用侦听器。下面是一个例子。最好将加载值从DB移到单独的类中,并在应用程序中使用加载值。

更新代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
public class SyncronizedComboboxExample extends JPanel
{
String[] provinces= {"A","B","C"};
String[] districtsForA = {"l","m","n"};
String[] districtsForB = {"x","y","z"};
String[] districtsForC = {"p","q","r"};
public SyncronizedComboboxExample() {
JComboBox provincesComboBox = new JComboBox(provinces);
final DefaultComboBoxModel model = new DefaultComboBoxModel(districtsForA);
JComboBox districtsComboBox = new JComboBox(model);
provincesComboBox.addItemListener(e -> {
if(e.getStateChange() == ItemEvent.SELECTED){
DefaultComboBoxModel comboBoxModel;
if(provincesComboBox.getSelectedItem().equals("A")){
comboBoxModel = new DefaultComboBoxModel(districtsForA);
districtsComboBox.setModel(comboBoxModel);
}
if(provincesComboBox.getSelectedItem().equals("B")){
comboBoxModel = new DefaultComboBoxModel(districtsForB);
districtsComboBox.setModel(comboBoxModel);
}
if(provincesComboBox.getSelectedItem().equals("C")){
comboBoxModel = new DefaultComboBoxModel(districtsForC);
districtsComboBox.setModel(comboBoxModel);
}
}
});
add(provincesComboBox, BorderLayout.PAGE_START);
add(districtsComboBox, BorderLayout.AFTER_LAST_LINE);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("CustomComboBoxDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new SyncronizedComboboxExample();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(() -> createAndShowGUI());
}
}

最新更新