2016-08-18 2 views
-1

ComboBoxSelectCustomer이라는 ComboBox를 사용하여 CustomerTableView이라는 TableView를 채우려고합니다. 기본적으로 사용자는 ComboBox 내부의 고객 목록에서 고객을 선택하고 TableView는 해당 고객의 이름과 일치하는 데이터로 채워집니다. 각 고객과 함께 SQL 파일에 여러 테이블을 가지고 있지만 콤보 상자에서 고객 이름을 선택할 때 어떤 이유로 TableView에서 아무 일도 일어나지 않고 그냥 비어 있습니다. 오류나 코드와 관련된 문제는 없습니다. 설치 방법이 문제의 원인이라고 생각합니다. 내 코드를 검토하고 나는 콤보가ComboBox를 사용하여 TableView 채우기 JavaFX

// MainController

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package supremeinkcalcmk2; 

import java.net.URL; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ResourceBundle; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javax.swing.DefaultComboBoxModel; 

/** 
* FXML Controller class 
* 
*/ 
public class MainController implements Initializable { 

    @FXML 
    public ComboBox<String> ComboBoxSelectCustomer; 
    @FXML 
    private TableView CustomerTableView; 
    @FXML 
    private TableColumn<BaseColor, String> BaseColor; 
    @FXML 
    private TableColumn<BaseColor, String> Price; 
    Connection connection; 

    /** 
    * Initializes the controller class. 
    */ 
    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // TODO 

     //Customer combo box 
     ComboBoxSelectCustomer.setOnAction(e -> System.out.println(ComboBoxSelectCustomer.getValue())); 
     buildDataComboBox(); 
     buildDataTableView(); 

    } 

    public void buildDataTableView() { 
     //viewtable db connect 
     ObservableList<BaseColor> dataCustomerViewTable = FXCollections.observableArrayList(); 
     BaseColor.setCellValueFactory(new PropertyValueFactory<BaseColor, String>("BaseColor")); 
     Price.setCellValueFactory(new PropertyValueFactory<BaseColor, String>("Price")); 
     connection = SqlConnection.CustomerConnection(); 
     try { 
//problem 
      String SQL = "Select BaseColor, Price FROM " + ComboBoxSelectCustomer.getValue(); 
      connection = SqlConnection.CustomerConnection(); 
      ResultSet rs = connection.createStatement().executeQuery(SQL); 
      while (rs.next()) { 
       BaseColor BS = new BaseColor(); 
       BS.BaseColor.set(rs.getString("BaseColor")); 
       BS.Price.set(rs.getString("Price")); 
       dataCustomerViewTable.add(BS); 
      } 
      CustomerTableView.setItems(dataCustomerViewTable); 
     } catch (Exception e) { 
     } 
    } 

    //combobox sql connection and fill data 
    public void buildDataComboBox() { 
     ObservableList<String> dataComboBox = FXCollections.observableArrayList(); 
     connection = SqlConnection.CustomerConnection(); 
     try { 
      String SQL = "Select Name From CustomerList"; 
      ResultSet rs = connection.createStatement().executeQuery(SQL); 
      while (rs.next()) { 
       dataComboBox.add(rs.getString("Name")); 
      } 
      ComboBoxSelectCustomer.setItems(dataComboBox); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("Error Building ComboBox Data"); 
     } 
     if (connection == null) { 
      System.exit(1); 
      System.out.println("Connection failed"); 
     } 
    } 

    public boolean isDbConnected() { 
     try { 
      return connection.isClosed(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 

} 
+0

이벤트 핸들러에'buildDataTableView'를 호출 했습니까? 또한,'buildDataTableView'에서 예외를 억압하지 마십시오 : 뭔가 잘못되었을 때 당신이 무엇을 알 수있는 방법이 없습니다. –

+0

당신은'ComboBoxSelectCustomer'의 변경에 대해 무언가를 시도합니다. 그러나 추가하는 유일한 리스너는'onAction' 리스너입니다. 이것은 원하는 것을하지 않고 잠재적으로 fxml에서 추가 된 리스너를 대체합니다. 코드에서 분명하게 확립 된 데이터베이스는'initialize' 메쏘드에서 수행되는 것으로 보입니다. 데이터베이스에서 데이터를 로딩하는 사용자 상호 작용에 실제로 반응하는 것은 무엇입니까? 또한'BaseColor'의 필드에 직접 접근하여 속성을 수정하면 'PropertyValueFactory'가 작동하는 데 필요한 메소드를 구현 했습니까? – fabian

답변

-1

만든 setOnAction 이벤트에있는 TableView를 채울 수있는 SQL 문을 실행할 가지고 더 나은 방법으로 이러한 방법을 설정하는 방법에 저를 알려 주시기 바랍니다 ComboBoxSelectionCustomer은 사용자가 ComboBox에서 옵션을 변경할 때마다 TableView를 채울 수 있도록합니다.

ComboBoxSelectCustomer.setOnAction((event) -> { 
});