У меня сейчас есть следующий код:
if (task5.isVisible()) {
if (!task1.isVisible()) {
task1.setVisible(true);
checkBox1.setVisible(true);
} else if (!task2.isVisible()) {
task2.setVisible(true);
checkBox2.setVisible(true);
} else if (!task3.isVisible()) {
task3.setVisible(true);
checkBox3.setVisible(true);
} else if (!task4.isVisible()) {
task4.setVisible(true);
checkBox4.setVisible(true);
} else {
task6.setVisible(true);
checkBox6.setVisible(true);
}
} else if (task4.isVisible()) {
if (!task1.isVisible()) {
task1.setVisible(true);
checkBox1.setVisible(true);
} else if (!task2.isVisible()) {
task2.setVisible(true);
checkBox2.setVisible(true);
} else if (!task3.isVisible()) {
task3.setVisible(true);
checkBox3.setVisible(true);
} else {
task5.setVisible(true);
checkBox5.setVisible(true);
}
} else if (task3.isVisible()) {
if (!task1.isVisible()) {
task1.setVisible(true);
checkBox1.setVisible(true);
} else if (!task2.isVisible()) {
task2.setVisible(true);
checkBox2.setVisible(true);
} else {
task4.setVisible(true);
checkBox4.setVisible(true);
}
} else if (task2.isVisible()) {
if (!task1.isVisible()) {
task1.setVisible(true);
checkBox1.setVisible(true);
} else {
task3.setVisible(true);
checkBox3.setVisible(true);
}
} else if (task1.isVisible()) {
task2.setVisible(true);
checkBox2.setVisible(true);
} else {
task1.setVisible(true);
checkBox1.setVisible(true);
}
и пытаюсь сделать его более лаконичным, используя циклы, списки и карты. Я создал ArrayList, который принимает объекты массива TextField и HashMap, который принимает TextFields в качестве ключей и CheckBoxes в качестве значений.
private List<TextField[]> tasks = new ArrayList<>();
private Map<TextField, CheckBox> map = new HashMap<>();
tasks.add(new TextField[]{task5, task6, task1, task2, task3, task4});
tasks.add(new TextField[]{task4, task5, task1, task2, task3});
tasks.add(new TextField[]{task3, task4, task1, task2});
tasks.add(new TextField[]{task2, task3, task1});
tasks.add(new TextField[]{task1, task2, task1});
map.put(task1, checkBox1);
map.put(task2, checkBox2);
map.put(task3, checkBox3);
map.put(task4, checkBox4);
map.put(task5, checkBox5);
map.put(task6, checkBox6);
Я пытался сделать следующее:
for (TextField[] task : tasks) {
if (task[0].isVisible()) {
for (int i = 2; i < task.length; i++) {
if (!task[i].isVisible()) {
task[i].setVisible(true);
map.get(task[i]).setVisible(true);
break;
} else {
task[1].setVisible(true);
map.get(task[1]).setVisible(true);
}
}
} else {
if (task[0] == task1) {
task1.setVisible(true);
checkBox1.setVisible(true);
break;
}
}
}
Это почти то же самое, но, похоже, есть пара несоответствий. Я пытался использовать отладчик, но он не очень полезен при работе с JavaFX. Любая помощь / попытка исправить мою проблему будет принята с благодарностью.
Итак, мне просто нужно сделать код в верхней части страницы (код с тоннами операторов if, else if и else) более кратким.
Полный код доступен по адресу https://github.com/KrishMehta/ToDo (кстати, это проект JavaFX)