我目前有以下代码:
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);
}
,并且正在尝试使用循环,列表和映射使其更加简洁。我创建了一个使用TextField数组对象的ArrayList和一个将TextFields作为键和CheckBoxes作为值的HashMap。
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项目)