사용자가 [X] 버튼을 클릭하면 응용 프로그램을 데이터 양식에 가까운 상태로 변경하려고합니다. 응용 프로그램에서 사용자는 TableView의 행을 두 번 클릭하여 행을 편집 할 수 있습니다. 변경이 이루어지고 사용자가 [X]를 클릭하면 사용자에게 변경 사항을 확인하도록 요청한 다음 변경 사항을 저장합니다. 아래 코드는 제가 지금까지 가지고있는 것입니다.JavaFX는 보조 창 닫기/숨기기시 데이터 형식 변경 사항을 저장합니다.
메인 컨트롤러 :
Scene scene = new Scene(decorator); scene.getStylesheets().add(LawnCareSystem.class.getResource("/resources/css/style.css").toExternalForm());
stage.setScene(scene);
stage.setOnHidden(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
EditCustomerController.saveChanges();
}
});
stage.show();
보조 컨트롤러 :
public static void saveChanges(CustomerRow cr){
StringBuilder sb = new StringBuilder(100);
sb.append("update Customers");
if(!cFName.getText().equals(cr.getFirstName())){
sb.append(" set FirstName = '"+cFName.getText()+"',");
}
if(!cLName.getText().equals(cr.getLastName())){
sb.append(" set LastName = '"+cLName.getText()+"',");
}
if(!cEMail.getText().equals(cr.getEmail())){
sb.append(" set Email = '"+cEMail.getText()+"',");
}
if(!cPhoneNumber.getText().equals(cr.getPhoneNumber())){
sb.append(" set PhoneNumber = '"+cPhoneNumber.getText()+"',");
}
sb.deleteCharAt(sb.length()-1);
sb.append(" where Customer_ID = "+cCustomerID);
. . .
. .
.
}
문제는 saveChanges를이 이벤트 핸들러에 액세스하기 위해 정적 이루어져야한다는 것입니다. 더 나은 해결책이 있어야하며 여러분이 그 방향으로 나를 지적 해 주길 바랍니다.
키워드를 방법에서
static
키워드 만 제거하면됩니다. 왜 정적으로 만들어야합니까? "정적"은 접근성과 아무런 관련이 없습니다. 범위에 관한 것입니다. 비 정적으로 만들고 컨트롤러 클래스가 아닌 컨트롤러 * 인스턴스 *를 사용하여 호출하십시오. –컨트롤러 인스턴스에서 어떻게 호출합니까? 컨트롤러에서 스테이지에 액세스 할 수 있습니까? – JGray
아니요, 컨트롤러 인스턴스에 대한 참조를 사용하여 호출해야합니다. 즉,'EditCustomerController controller = loader.getController();','controller.saveChanges();','loader'는 'FXMLLoader' 인스턴스였습니다. 'EditCustomerController'가 컨트롤러 클래스 인 FXML 파일을로드하는 데 사용됩니다. –