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;
}
}
}
イベントハンドラに 'buildDataTableView'を呼び出すことを意味しましたか?また、 'buildDataTableView'の例外を抑止しないでください。もし何かが間違っていたら、何が分かっているのかわかりません。 –
あなたは 'ComboBoxSelectCustomer'の変更に対して何かしようとしますが、あなたが追加する唯一のリスナーは' onAction'リスナーです。これはfxmlから追加されたリスナーを置き換えます。コード内に明示的に設定されているデータベースは、 'initialize'メソッドで実行されているようです。データベースからデータをロードするユーザとの対話に実際にどのような反応をしますか?また、BaseColorのフィールドに直接アクセスして、あなたは 'PropertyValueFactory'が動作するために必要なメソッドを実装しましたか? – fabian