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;
}
}
}
이벤트 핸들러에'buildDataTableView'를 호출 했습니까? 또한,'buildDataTableView'에서 예외를 억압하지 마십시오 : 뭔가 잘못되었을 때 당신이 무엇을 알 수있는 방법이 없습니다. –
당신은'ComboBoxSelectCustomer'의 변경에 대해 무언가를 시도합니다. 그러나 추가하는 유일한 리스너는'onAction' 리스너입니다. 이것은 원하는 것을하지 않고 잠재적으로 fxml에서 추가 된 리스너를 대체합니다. 코드에서 분명하게 확립 된 데이터베이스는'initialize' 메쏘드에서 수행되는 것으로 보입니다. 데이터베이스에서 데이터를 로딩하는 사용자 상호 작용에 실제로 반응하는 것은 무엇입니까? 또한'BaseColor'의 필드에 직접 접근하여 속성을 수정하면 'PropertyValueFactory'가 작동하는 데 필요한 메소드를 구현 했습니까? – fabian