2017-11-25 1 views
0

콤보 박스 항목을 선택하여 데이터베이스의 tableview에 데이터를 표시하려고합니다. Combobox에는 사용자가 선택할 수있는 데이터베이스의 열이 있습니다. 나는 이것을 시도, 콤보 상자는 괜찮아 코드는 오류없이 작동하지만 테이블은 업데이트되지 않습니다.JavaFX : 선택한 콤보 상자 (바인딩)로 테이블 뷰 컨텍스트 업데이트

컨트롤러 클래스 :

package application; 

    import java.io.IOException; 
    import java.net.URL; 
    import java.sql.PreparedStatement; 
    import java.sql.ResultSet; 
    import java.util.ResourceBundle; 

    import javafx.collections.FXCollections; 
    import javafx.collections.ObservableList; 
    import javafx.event.ActionEvent; 
    import javafx.fxml.FXML; 
    import javafx.fxml.FXMLLoader; 
    import javafx.fxml.Initializable; 
    import javafx.scene.Node; 
    import javafx.scene.Parent; 
    import javafx.scene.Scene; 
    import javafx.scene.control.ComboBox; 
    import javafx.scene.control.TableColumn; 
    import javafx.scene.control.TableView; 
    import javafx.scene.control.cell.PropertyValueFactory; 
    import javafx.stage.Stage; 

     public class SortareDupaAngajatiController implements Initializable{ 
      final ObservableList<tableAngajati> data=FXCollections.observableArrayList(); 
      final ObservableList<String> optiuni=FXCollections.observableArrayList(); 
      PreparedStatement intabel=null; 
      ResultSet rezultate=null; 
      String prequery; 
      String postquery; 

      @FXML 
      public ComboBox<String> meniu; 
      @FXML 
      TableView<tableAngajati> tabelangajati; 

      @FXML 
      private TableColumn<tableAngajati,String> numesediucol; 

      @FXML 
      private TableColumn<tableAngajati,Integer> angajaticol; 

      @Override 
      public void initialize(URL location, ResourceBundle resources) { 

       comboMeniu(); 
       insertInTabel(); 


      } 


      public void comboMeniu(){ 
       try { 
        String query = "SELECT * FROM maginfo"; 
        PreparedStatement dindb = Conexiune.conexiuneBd.prepareStatement(query); 
        ResultSet rezultate = dindb.executeQuery(); 


        while (rezultate.next()) { 
         optiuni.add(rezultate.getString("nume")); 
         meniu.setItems(optiuni); 
        } 
        dindb.close(); 
        rezultate.close(); 
      } 
      catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
      } 

      public void insertInTabel(){ 

     try { 
        prequery="SELECT * FROM sediu where nume='"+meniu.getValue()+"'ORDER BY numarangajati DESC"; 
        postquery=prequery; 
        intabel= Conexiune.conexiuneBd.prepareStatement(postquery); 
        rezultate=intabel.executeQuery(); 

        while(rezultate.next()){ 
         data.add(new tableAngajati(
           rezultate.getString(2), 
           rezultate.getInt(7) 
           )); 


        } 

        intabel.close(); 
        rezultate.close(); 

       } catch (Exception e) { 
        System.err.println(e); 
       } 

       numesediucol.setCellValueFactory(new PropertyValueFactory<>("numesediu")); 
       angajaticol.setCellValueFactory(new PropertyValueFactory<>("numarangajati")); 
       tabelangajati.setItems(null); 
       tabelangajati.setItems(data); 

      }} 

테이블 등급 :

 

    package application; 

    public class tableAngajati { 
     private String numesediu; 
     private int angajati; 


     public tableAngajati(String numesediu, int angajati) { 
      super(); 
      this.numesediu=numesediu; 
      this.angajati=angajati; 
     } 

     public String getNumesediu(){ 
      return numesediu; 
     } 

     public void setNumesediu(String numesediu){ 
      this.numesediu=numesediu; 
     } 

     public int getNumarangajati(){ 
      return angajati; 
     } 

     public void setNumarangajati(int angajati){ 
      this.angajati=angajati; 
     } 

    } 

고마워요!

+1

쇼'나는 아래 fxml를 게시 @mrmcwolf –

+0

파일 fxml'. 고맙습니다! – AnoGio

답변

0

FXML 파일 :

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.ComboBox?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.ScrollPane?> 
<?import javafx.scene.control.Separator?> 
<?import javafx.scene.control.TableColumn?> 
<?import javafx.scene.control.TableView?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.layout.Pane?> 
<?import javafx.scene.text.Font?> 

<AnchorPane prefHeight="389.0" prefWidth="620.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SortareDupaAngajatiController"> 
    <children> 
     <Separator layoutX="178.0" orientation="VERTICAL" prefHeight="382.0" prefWidth="0.0" /> 
     <Pane layoutX="-9.0" layoutY="-1.0" opacity="0.6" prefHeight="390.0" prefWidth="190.0" style="-fx-background-color: #0074D9;"> 
     <children> 
      <Button layoutX="35.0" layoutY="20.0" mnemonicParsing="false" onAction="#arataHome" prefHeight="100.0" prefWidth="130.0" style="-fx-background-color: #FFF;" text="Home" /> 
      <Button layoutX="35.0" layoutY="146.0" mnemonicParsing="false" onAction="#arataAdaugareSediu" prefHeight="100.0" prefWidth="130.0" style="-fx-background-color: #FFF;" text="Adauga sediu" /> 
      <Button layoutX="35.0" layoutY="272.0" mnemonicParsing="false" onAction="#arataAdaugareMagazin" prefHeight="100.0" prefWidth="130.0" style="-fx-background-color: #FFF;" text="Adauga supermarket" /> 
     </children> 
     </Pane> 
     <Label layoutX="195.0" layoutY="10.0" text="Sortare supermarket-uri dupa nr. de angajati din toate sediile" wrapText="true"> 
     <font> 
      <Font name="Berlin Sans FB" size="16.0" /> 
     </font> 
     </Label> 
     <ScrollPane layoutX="194.0" layoutY="38.0" prefHeight="304.0" prefWidth="414.0"> 
     <content> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="361.0" prefWidth="399.0"> 
       <children> 
        <TableView fx:id="tabelangajati" layoutX="1.0" layoutY="30.0" prefHeight="338.0" prefWidth="411.0"> 
        <columns> 
         <TableColumn fx:id="numesediucol" prefWidth="204.0" sortable="false" text="Sedii" /> 
         <TableColumn fx:id="angajaticol" prefWidth="193.0" sortable="false" text="Numar angajati" /> 
        </columns> 
        </TableView> 
        <ComboBox fx:id="meniu" layoutX="100.0" layoutY="3.0" prefHeight="25.0" prefWidth="209.0" promptText="Selectati supermarket-ul" /> 
       </children></AnchorPane> 
     </content> 
     </ScrollPane> 
     <Button layoutX="556.0" layoutY="354.0" mnemonicParsing="false" onAction="#Inapoi" text="Inapoi" /> 
    </children> 
</AnchorPane> 

+0

'onAction = "# insertInTabel"'을'ComboBox fx : id = "meniu"'에 추가하십시오. –

+0

@mrmcwolf 많은 사람 감사합니다! 코드가 작동하지만 메뉴에서 다른 항목을 선택하면 표가 새로 고침되지 않고 이전에 선택한 항목이 모두 포함됩니다. – AnoGio

+0

@mrmcwolf 끝냈습니다! insertInTabel try에'data.removeAll (data);'를 추가한다. 관심을 가져 주셔서 감사합니다. – AnoGio