2014-10-07 4 views
1

다음과 같은 문제가 있습니다. JavaFX8에서 테이블 뷰를 배열로 채우려고합니다. 그래서, 나는 테이블 뷰에 행으로 배열을 추가하려고합니다. Enter 키를 누를 때 컨트롤러의 FXML 파일에서이 코드를 실행합니다.JavaFX8 : 문자열이 TableView에 표시되지 않습니다.

String[] words = {"ace", "boom", "crew", "dog", "eon"}; 
List<String> tableViewRow = Arrays.asList(words); 
ObservableList<String> row = FXCollections.observableList(tableViewRow); //observableArrayList also doesn't work 
transactionOverview.getItems().add(row); 

transactionOverview 내 tableview에, 그리고 문자열 [] [] 내 실제 문자열 단지 자리 표시 자입니다 :이 코드입니다. 여러 가지 방법으로 내 tableview를 만들려고했습니다 :

public TableView<ObservableList<String>> transactionOverview; 
public TableView<ObservableList> transactionOverview; 
public TableView transactionOverview; 

아무도 작동하지 않습니다. 문제는 tableview가 내가 선택할 수있는 여분의 행을 가져 왔지만 현재 테이블 뷰에 문자열 값이 표시되어 있다는 것입니다. 나는 그것이 추가되는지 모른다.

내 코드는 Javafx 2.2 - Dynamic table view - table data (Jitendra Pareek의 답변)을 기반으로하며, 내 테이블 뷰를 채우기 위해 여분의 클래스를 사용하고 싶지 않기 때문에이 솔루션을 선택했습니다.

도움을 주시면 감사하겠습니다.

+0

항상 여분의 행이 있습니까? 나는 "단어"가 단지 하나, 두 개 또는 아무 것도 가지고 있지 않을 때 무슨 일이 일어나는가를 의미합니다. –

+0

TableView에는 항상 5 개의 열 (FXML에서 고정)이 있으며 추가 행을 하나씩 추가해야합니다. 행의 양은 모든 트랜잭션마다 달라야합니다. 이 질문에 대한 대답입니까? 내가 알 필요가 있는지 확신 할 수 없기 때문에? – bashoogzaad

+0

맞춤형 셀 팩터를 사용하고 있습니까? –

답변

1

(사용자 의견에 따라) 고정 된 수의 열이 있으므로 테이블의 각 행에 항목을 보유 할 모델 클래스를 만드는 것이 좋습니다. 그런 다음 표준 패턴을 따르고 쉽게 작동합니다.

TableView을 관리하지만 각 열에 대해 셀 값 팩토리를 제공해야합니다. 이것은 기본적으로 행의 항목에서 셀 값을 가져 오는 방법을 지정하는 함수입니다. JavaFX 속성을 사용하는 모델 클래스를 사용하는 경우 PropertyValueFactory을 사용할 수 있습니다 (Java 8 람다 식을 사용하면 거의 불필요합니다). 그렇지 않으면 콜백을 구현해야합니다. 당신이 정말로 각 행의 데이터를 보유하고 테이블과 테이블 열은 모든 FXML 파일에 정의되어 가정 할 목록 구조를 사용하려면

, 당신은 컨트롤러 클래스에서 이런 짓을 할 것이다 :

@FXML 
private TableView<ObservableList<String>> transactionOverview ; 

// ... 

public void initialize() { 
    for (int i=0; i < transactionOverview.getColumns().size(); i++) { 
     TableColumn<ObservableList<String>, String> col = transactionOverview.getColumns().get(i); 
     final int colIndex = i ; 
     col.setCellValueFactory((CellDataFeatures cellData) -> { 
      ObservableList<String> rowData = cellData.getValue(); 
      return new ReadOnlyStringWrapper(rowData.get(colIndex)); 
     }); 
    } 

    // ... 
} 
+0

도와 주셔서 대단히 감사합니다. @ James_D, 저는 지금 여분의 수업을 사용하고 있습니다. 그러나 나는 장래에 확실히 이것을 필요로합니다! – bashoogzaad

관련 문제