2017-09-22 40 views
0

我正在試圖製作一個UI,通過按按鈕添加的文本字段獲取數字,添加數字,然後打印控制檯。我已經想出瞭如何添加無限數量的文本字段,但我似乎無法從每個文本字段中獲取所有數字並將其打印出來。每當我將數字放入我的文本框並按下我的「添加數字」按鈕,它只會返回添加的最新文本字段中的數字。這裏是我的代碼:如何將多個文本字段添加到數組列表JavaFX

public VBox pane; 
@FXML 
private Button addButton; 

@FXML 
private TextField field; 

@FXML 
private void addNewTextField(ActionEvent event) { 
    field = new TextField(); 

    field.textProperty().addListener(new ChangeListener<String>() { 
     @Override 
     public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
      if (!newValue.matches("\\d*")) { 
       field.setText(newValue.replaceAll("[^\\d]", "")); 
      } 
     } 
    }); 

    pane.getChildren().add(field); 

} 

@FXML 
private void addNumbers(ActionEvent e) { 

    ArrayList<Integer> numList = new ArrayList<>(); 

    try { 
     ArrayList<Integer> list = new ArrayList<>(); 

     int result = Integer.parseInt(field.getText()); 

     list.add(result); 



     int sum = 0; 
     for (int i : list) { 
      sum += result; 
      System.out.println("The sum of numbers is = " + sum); 
     } 

    } catch (NumberFormatException exception) { 
     exception.printStackTrace(); 
    } 
} 

}

+0

使'field'成爲局部變量,而不是實例字段。 –

+0

因此,將字段設置爲公共變量 – koory

+0

如果您的'TextField'的'Pane's只包含'TextField's,那麼您需要使用'Pane'來獲取'TextField's。在你的'addNumber(..)'方法中使用'pane.getChildren()'。 – Sedrick

回答

1

在這種情況下,該領域不應該是一個實例變量可言,因此它不應該被標註@FXML,而應該將你的方法內聲明。

如果您不知道局部變量是什麼以及它與實例變量有什麼不同,請閱讀tutorial on local variables

刪除這些行:

@FXML 
private TextField field; 

更改方法體:

private void addNewTextField(ActionEvent event) { 
    TextField field = new TextField(); 
    . . . 
} 

旁白:你不應該設置註釋@FXML到一個新值的變量(一個參考值將被注入FXMLLoader,並且不應該被應用程序員重新分配)。

相關問題