[英]Synchronized Combo Box Java Swing
我想在 Java Swing中創建同步組合框。 當我選擇其中一個省份時,kabupaten(地區)組合框將包含所選省份的所有地區。 但是有一個問題。 地區組合框只選擇省組合框的第一個條目,當我 select 省組合框中的另一個條目時不會改變。 我需要做什么才能獲得完全同步的組合框? 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");
}
}
如果要根據省份組合框的值將值動態加載到區 combobox,則需要使用偵聽器。 下面提到例子。 最好將加載值從數據庫移動到單獨的 class 並在您的應用程序中使用加載的值。
更新代碼:
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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.