2017-09-05 4 views
2

현재 실물 크기의 here입니다.JavaFX - 테이블 뷰 셀의 텍스트 변경

내가 원하는 것은 사용자가 현재 테이블에 표시된 이름을 입력하고 "변경"버튼을 클릭하면 지정된 이름의 항목/행의 "상태"열 텍스트를 다른 것으로 변경합니다 예 : "실행"과 같은 텍스트

I 현재 다음과 같은 코드가 있습니다

Controller.java

public class Controller implements Initializable { 
    @FXML 
    TableView<TableRow> tableView; 
    @FXML 
    TableColumn<TableRow, String> tbc_name; 
    @FXML 
    TableColumn<TableRow, String> tbc_status; 

    ObservableList<TableRow> rows = FXCollections.observableArrayList(); 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     tbc_name.setCellValueFactory(new PropertyValueFactory<TableRow, String>("name")); 
     tbc_status.setCellValueFactory(new PropertyValueFactory<TableRow, String>("status")); 

     tableView.getItems().setAll(gettableRows()); 

     System.out.println("started"); 
    } 

    public ObservableList<TableRow> gettableRows() { 
     rows.add(new TableRow("Name1", "none")); 
     rows.add(new TableRow("Name2", "none")); 
     rows.add(new TableRow("Name3", "none")); 

     return rows; 

    } 
} 


TableRow.java

,691을

ListViewItem lvi = listview1.FindItemWithText(username); 
lvi.Subitems[3].Text = "Running..."; 

어떤 도움이 :

public class TableRow { 
    private String name; 
    private String status; 

    public TableRow(){ 
     this.name = ""; 
     this.status = ""; 
    } 

    public TableRow(String name_, String status_){ 
     name = name_; 
     status = status_; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 
} 

C#에서 나는 다음과 같은 코드로리스트 뷰에서 특정 셀의 텍스트를 변경할 수 있어요, 내가 달성하기 위해 노력하고 무엇을 더 잘 이해하려면 고맙습니다. 당신이있는 tableView의 행을 대표하는 모델 클래스가있는 경우

답변

3

, 당신은 cellValueFactory로 사용하므로 이러한 행 리팩토링 할 수

tbc_name.setCellValueFactory(new PropertyValueFactory<TableRow, String>("name")); 
    tbc_status.setCellValueFactory(new PropertyValueFactory<TableRow, String>("status")); 

에 :

tbc_name.setCellValueFactory(data -> data.getValue().nameProperty()); 
tbc_status.setCellValueFactory(data -> data.getValue().statusProperty()); 

를하고 리팩토링 TableRow 클래스로 :

public class TableRow { 

    private StringProperty name; 
    private StringProperty status; 

    public TableRow(String name, String status) { 
     this.name = new SimpleStringProperty(name); 
     this.status = new SimpleStringProperty(status); 
    } 

    public String getName() { 
     return name.get(); 
    } 

    public StringProperty nameProperty() { 
     return name; 
    } 

    public String getStatus() { 
     return status.get(); 
    } 

    public StringProperty statusProperty() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status.set(status); 
    } 
} 

다음으로 컨트롤러를 textField (위의 텍스트 필드 변경 단추) 및 단추 (변경).

change.setOnAction(action ->{ 
    String text = changeTextField.getText(); 
    tableView.getItems().stream() 
         .filter(row -> row.getName().equals(text)) 
         .findFirst() 
         .ifPresent(row -> row.setStatus("Running")); 
}); 
+0

대단히 감사합니다. 완벽하게 작동합니다. – mclarence

관련 문제