簡體   English   中英

單擊javafx中的組合框時如何刷新數據?

[英]How to refresh data when click combobox in javafx?

每次按組合Combobox我都希望從database提供的每個不同值中刷新數據

但是每次按下組合框時我得到的是,數據將繼續增加而不是刷新

屏幕截圖

public void initialize(URL url, ResourceBundle rb) {
        con = new DBConnect();
        con.connect();

        depart();
    }   
void init(Stage stage) {
        this.stage = stage;
    }

    public void depart(){
        String sql = "SELECT DISTINCT b.nama_bandara FROM departure as depart "
                + "INNER JOIN bandara as b on b.kode_bandara = depart.kode_bandara";
        try {
            pst = con.conn.prepareStatement(sql);
            con.rs = pst.executeQuery();

            while(con.rs.next()){
                combo.getItems().addAll(con.rs.getString(1));

            }
        } catch (SQLException ex) {
            Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

每次點擊,數據總是增加

@FXML
    private void CB(ActionEvent event) {

        String depart = combo.getValue();
        String sql = "SELECT b.kota, bb.kota, single.harga FROM single_trip as single \n" +
                    "INNER JOIN departure as depart ON depart.kode_departure = single.kode_departure \n" +
                    "INNER JOIN bandara as b on b.kode_bandara = depart.kode_bandara \n" +
                    "INNER JOIN arrived as arrive on arrive.kode_arrived = single.kode_arrived \n" +
                    "INNER JOIN bandara as bb on bb.kode_bandara = arrive.kode_bandara \n" +
                    "WHERE b.nama_bandara = '"+depart+"'";
        try {
            con.st = con.conn.createStatement();
            con.rs = con.st.executeQuery(sql);
            Node[] nodes = new Node[1];

            while(con.rs.next()){

                for(Node node : nodes){

                    FXMLLoader hb = new FXMLLoader(getClass().getResource("ComboBoxloop.fxml"));
                    node = hb.load();
                    String namaDepart = con.rs.getString("b.kota");
                    String namaArrive = con.rs.getString("bb.kota");
                    int harga = con.rs.getInt("single.harga");
                    ComboBoxloopController controller = hb.getController();
                    controller.getValueFromCB(namaDepart, namaArrive, harga);

                    controller.setDepart(namaDepart);
                    controller.setArrive(namaArrive);
                    controller.setHarga(harga);

                   //i think i must add something in here
                   pnlComboBoxloop.getChildren().addAll(node);
                }
            }
        } catch (SQLException | IOException ex) {
            Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

我想我必須使用pnlComboBoxloop.getChildren().addAll(node);

因為每次我單擊組合框時數據總是增加

public String getDepart() {
        return Depart;
    }

    public void setDepart(String Depart) {
        this.Depart = Depart;
    }

    public String getArrive() {
        return arrive;
    }

    public void setArrive(String arrive) {
        this.arrive = arrive;
    }

    public int getHarga() {
        return harga;
    }

    public void setHarga(int harga) {
        this.harga = harga;
    }

    public void getValueFromCB(String depart, String arrive, int harga){
               TripDeparture.setText(depart);
               TripArrived.setText(arrive);
               TripHarga.setText(Integer.toString(harga));
    }

您正在使用addAll-添加到列表中。 嘗試使用setAll代替

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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