2016-08-27 6 views
0

프로젝트에서 나는 작업 중인데, 화면에 매트릭스의 값을 표시해야합니다.Javafx는 gridpane의 텍스트 필드에서 텍스트를 가져옵니다.

for(int row = 0; row < length; row++){ 
     for(int column = 0; column < width; column++){ 
      // Create a new TextField in each Iteration 
      TextField tf = new TextField(); 
      tf.setPrefHeight(50); 
      tf.setPrefWidth(50); 
      tf.setAlignment(Pos.CENTER); 
      tf.setEditable(true); 
      tf.setText(String.valueOf(this.getElement(row, column))); 

      // Iterate the Index using the loops 
      setRowIndex(tf,row); 
      setColumnIndex(tf,column);  
      table.getChildren().add(tf); 
     } 
    } 

를 내가 저장할 수 있도록하려면, 텍스트 필드에 대한 해당 화면 내부의 값을 변경하는 경우 : 코드를 다음을 나타냅니다으로 나는 gridpane에서 텍스트 필드를 사용하여이 작업을 수행하기로 결정했습니다. 그렇게하기 위해서는 텍스트 필드에서 텍스트를 가져와야합니다. 다음 코드를 시도했지만 테이블의 요소에 대한 반복은 노드로 정의되므로 .getText() 메서드가 없습니다.

OkButton.setOnAction(new EventHandler<ActionEvent>(){ 
     @Override 
     public void handle (ActionEvent event){ 
      for (Node nd:table.getChildren()){ 
       //Code goes here but Node does not have .getText() method 
      } 

      Stage stage = (Stage) OkButton.getScene().getWindow(); 
      stage.close(); 
     } 
    }); 

그 값을 얻는 방법을 아는 사람이 있습니까?

고맙습니다. table 유형 GridPane의 가정하면

답변

2

,이처럼 TextField의를 추가해야합니다 :

table.add(tf, column, row); 

를 요소에 액세스하기위한, 그것은 COL 및 행 인덱스가 쉬운 방법이 없습니다 알려진 때 :

public Node getNodeByRowColumnIndex(final int row,final int column,GridPane gridPane) { 
    Node result = null; 
    ObservableList<Node> childrens = gridPane.getChildren(); 
    for(Node node : childrens) { 
     if(gridPane.getRowIndex(node) == row && gridPane.getColumnIndex(node) == column) { 
      result = node; 
      break; 
     } 
    } 
    return result; 
} 

JavaFX: Get Node by row and column에 대한 답변도 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. 여전히 결과는 .getText() 메소드가없는 Node 객체입니다. 따라서 텍스트 필드의 텍스트가 무엇인지 아직 알 수 없습니다. 또는 나는 무엇인가 내려다보고 있냐? – ComputerSaysNo

+0

아니요, 당신이 맞습니다, 아이들을 통해 iterating에서 얻는 것은'Node'입니다. 그러나 코드에서'TextField' 만 추가하는 경우 getNodeByRowColumnIndex'에서'TextField'에 캐스트를 추가하고'TextField'를 반환 할 수 있습니다. 그렇지 않으면'TextField'를 보유하고있는 셀에만 관심이 있다면 if 문에서 노드 유형을 추가적으로 검사하기 위해 메소드를 적용 할 수 있고 일치하는 것이 없다면 null 또는'Optional'을 리턴합니다. 나는 그것을 선호한다. – hotzst

+0

저는 Java에 조금 익숙해있어서 캐스팅에 대해 몰랐습니다. 실제로 필자의 테이블은 TextField 만 보유하고 있으므로 사용할 수 있습니다. 도움을 많이 주셔서 감사합니다! – ComputerSaysNo