簡體   English   中英

同步組合框 Java Swing

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM