У меня есть следующий код:Автоматически перебирать всех членов класса того же типа?
public void valueChanged(ChangeEvent ce, int index, Level previousState) {
Object source = ce.getSource();
LevelEditorPanel currentPanel = levelPanels.get (index);
//currentPanel.columns is a JSpinner
if (source == currentPanel.columns) {
for (int k = index + 1; k < levelPanels.size(); k++) {
LevelEditorPanel targetPanel = levelPanels.get(k);
if(((Integer) targetPanel.columns.getValue()).intValue() == previousState.columns) {
targetPanel.columns.setValue((Integer) currentPanel.columns.getValue());
}
}
}
}
Фактический код составляет около 35 линий; Я немного упростил это сообщение.
По существу, он прослушивает изменение, он идентифицирует, какой компонент был изменен в экземпляре A LevelEditorPanel, а затем обновляет один и тот же компонент в экземплярах от B до Z уровня LevelEditorPanel, чтобы соответствовать экземпляру A. (Не показано в приведенном выше коде, это только иногда обновляет B через Z, в зависимости от логических значений, заданных пользователем).
Код не слишком громоздкий для одного компонента. Но у меня около 50 JSpinners, 10 JComboBox и 40 JCheckBox в «LevelEditorPanel», которые все хотят контролировать одним и тем же способом.
Единственное решение, о котором я могу думать, это скопировать и вставить этот код для каждого из 49 JSpinners, сгенерировать аналогичный код для трех других типов входов, а затем скопировать и вставить код для каждого из них , что-то вроде этого:
if (source == currentPanel.columns) {
//Paste 35 lines
} else if (source == currentPanel.rows) {
//Paste 35 lines, change all references to 'columns' to 'rows'
} else if (source == currentPanel.speed) {
//etc
, который будет тысячами строк, которые действительно сложны в управлении кодом.
Я ищу лучшее решение. В psuedocode, я хотел бы сделать что-то вроде этого:
foreach (JSpinner theSpecificSpinner defined in LevelEditorPanel) {
if (source == currentPanel.theSpecificSpinner) {
target.theSpecificSpinner.setValue (currentValue);
//etc
}
}
перефразировать вопрос, я думаю, мне нужно два инструмента:
Возможность перебора всех из членов определенного экземпляра класса и поиска соответствия.
Тогда возможность динамически ссылаться на один и тот же элемент другого экземпляра этого класса.
В качестве альтернативы, мне нужно новое решение этой проблемы.
Надеюсь, что мой пост ясен. Если нет, пожалуйста, не стесняйтесь просить о каких-либо разъяснениях. Спасибо!