2016-08-18 25 views
-1

ComboBoxSelectCustomerというコンボボックスを使用して、CustomerTableViewというTableViewを作成しようとしています。基本的に、ユーザーはコンボボックス内の顧客のリストから顧客を選択し、その顧客の名前と一致するデータをTableViewに入力します。私は各顧客とSQLファイル内の複数のテーブルがありますが、コンボボックスから顧客名を選択する何らかの理由で、TableView上で何も起こらず、空のままです。エラーやコードに関する問題はありません。問題の原因となっているのはセットアップの仕方だと思います。私のコードを見直し、私はコンボボックスがJavaFX ComboBoxを使用してTableViewにデータを取り込む

//メインコントローラ

/* 
* 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イベントでテーブルビューを移入するSQL文をトリガー持ってより良い方法でこれらのメソッドを設定することができますどのように私を教えてくださいComboBoxSelectionCustomerは、ユーザーがComboBoxのオプションを変更するたびにTableViewを設定できるようにしました。

ComboBoxSelectCustomer.setOnAction((event) -> { 
}); 
関連する問題