У меня есть 14 пар кнопок, связанных с двумя группами текстовых полей, которые увеличивают и уменьшают связанные с ними текстовые поля на 2. В каждом текстовом поле отображается, сколько пар блинов определенного веса должно быть загружено на штангу. Они хранятся в двух двумерных массивах, один для фунтов, а другой для килограммов. [увеличить или уменьшить][кнопки]
final Button[][] poundIncrementDecrementButton = new Button[2][7];
final Button[][] kilogramIncrementDecrementButton = new Button[2][7];
Я использую Scene Builder и JavaFX и стараюсь не писать 28 обработчиков событий @FXML. Это метод, который я придумал до сих пор для перебора каждого из массивов, но я не уверен, как я могу заменить лямбда-выражения, чтобы это работало.
// assigns event handlers to increment and decrement buttons.
private void incrementDrecimentButtonEventHandlers() {
// p=1 increment buttons, p=2 decrement buttons
for (int p = 0; p < poundIncrementDecrementButton.length; p++) {
// loops through buttons
for (int j = 0; j < poundIncrementDecrementButton[p].length; j++) {
Button incrementButton = poundIncrementDecrementButton[p][j];
final int incrementDecriment = p;
final int textField = j;
incrementButton.setOnAction((ActionEvent event) -> {
incrementDecrementPlate("pounds", incrementDecriment, textField);
});
}
// k=1 increment buttons, k=2 decrement buttons
for (int k = 0; k < kilogramIncrementDecrementButton.length; k++) {
// loops through buttons
for (int j = 0; j < kilogramIncrementDecrementButton[k].length; j++) {
Button incrementButton = kilogramIncrementDecrementButton[k][j];
final int incrementDecriment = k;
final int textField = j;
incrementButton.setOnAction((ActionEvent event) -> {
incrementDecrementPlate("kilograms", incrementDecriment, textField);
});
}
}
}
}
Затем я заставляю обработчики событий вызывать этот метод с соответствующими индексами.
// increments or decrements the plates
private void incrementDecrementPlate(String unit, int incrementDecrement, int textField) {
Double oldValue = Double.parseDouble(poundTextFieldList.get(textField).getText());
String incremented;
String decremented;
if (oldValue % 2 != 0) {
incremented = Double.toString(oldValue + 1);
} else {
incremented = Double.toString(oldValue + 2);
}
if (oldValue % 2 != 0) {
decremented = Double.toString(oldValue - 1);
} else if (oldValue != 0) {
decremented = Double.toString(oldValue - 2);
} else {
decremented = Double.toString(oldValue);
}
switch (unit) {
case "pounds":
if (incrementDecrement == 0) {
poundTextFieldList.get(textField).setText(incremented);
} else {
poundTextFieldList.get(textField).setText(decremented);
}
break;
case "kilograms":
if (incrementDecrement == 0) {
kilogramTextFieldList.get(textField).setText(incremented);
} else {
kilogramTextFieldList.get(textField).setText(decremented);
}
break;
}
}
<Button>
элементов и 14 элементов текстового поля... - person James_D   schedule 19.04.2018