2014-10-19 4 views
0

광산 프로젝트에서 JavaFX의 TreeTableView를 사용하여 BillingTableRow 유형의 일부 객체를 표시하고 있습니다. 셀 편집기를 구현했지만 onEditCommit 이벤트를 설정하려고 할 때 컨텐츠 유형을 일치시킬 수 없습니다.JavaFX TreeTableView 열 setOnEditCommit()이 편집 된 셀을 저장하기위한 핸들러 승인을 거부합니다.

// Name column 
    Callback<TreeTableColumn<BillingTableRow, String>, TreeTableCell<BillingTableRow, String>> nameCallback = new Callback<TreeTableColumn<BillingTableRow, String>, TreeTableCell<BillingTableRow, String>>() { 
     @Override 
     public TreeTableCell<BillingTableRow, String> call(TreeTableColumn<BillingTableRow, String> p) { 
      return new TextFieldTreeTableCell<BillingTableRow, String>(); 
     } 
    }; 
    nameColumn.setCellFactory(nameCallback); 
    nameColumn.setOnEditCommit(new EventHandler<CellEditEvent<BillingTableRow, String>>() { 
     @Override 
     public void handle(CellEditEvent<BillingTableRow, String> t) { 
      ((BillingTableRow) t.getTableView().getItems().get(t.getTablePosition().getRow())).setName(t.getNewValue()); 
     } 
    }); 

사람이 무엇이 잘못되었는지 말해 주실 래요 : 여기

유형 BillingTableRow의 대상이 내부 문자열 유형의 이름을 저장하는 열 중 하나에 대한 내 코드? 나는 이클립스에 다음과 같은 오류가 발생합니다 :

유형 TreeTableColumn의 방법 setOnEditCommit이 (핸들러 < TreeTableColumn.CellEditEvent>) 인수 (새 이벤트 핸들러 < TableColumn.CellEditEvent < BillingTableRow, 문자열 >> 적용되지 않습니다() {})

내 문제에 도움을 주셔서 감사합니다. 당신이 가져 오기를

import javafx.scene.control.TableColumn.CellEditEvent; 

이 있기 때문이다

답변

1

그래서 당신은 컴파일러가이 CellEditEventTreeTableColumn.CellEditEventTableColumn.CellEditEvent로하지를 얻을 수 및 오류를 제공

EventHandler<CellEditEvent<BillingTableRow, String>> 

정의 할 때.

는, 그것을 해결하는 가져 오기를 삭제하고 작동

EventHandler<TreeTableColumn.CellEditEvent<BillingTableRow, String>> 
+0

, 감사합니다 expilcitly 쓰기합니다. 내 유일한 문제는 현재 행에 대한 데이터 개체를 가져 오는 방법을 모르고 새로운 이름 매개 변수로 t.getNewValue()를 전달하여 setName() 메서드를 호출한다는 것입니다. –

+0

@PeterJonsson. handle() 메서드의 코드가 작동하지 않습니까? –

+0

@uluik 아니, 발사,하지만 행의 밑에있는 데이터 개체를 얻을 수 없습니다. 나는 그것에 대한 setName() 메소드를 호출하기 위해 그것을 가져오고 싶다. 나는 이것을 어떻게하는지 모른다. 테이블을 사용할 때 완벽하게 작동하지만 TreeTableView를 사용하면 상황이 더 복잡해 보입니다. –