Как привести Поле к указанному типу - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать пользовательский интерфейс с использованием Swing, но мне не нужно вручную включать каждый компонент в мой массив компонентов.

Пока что лучшая попытка, которую я получил, создает исключение, которого у меня не может быть на самом деле.


for (Field f : this.getClass().getFields()) {
    if (f.getType().isAssignableFrom(JComponent.class)) {
        JComponent field = (JComponent) f.get(JComponent.class);
        components.add(field);
    }
}

Я хотел, чтобы код, который я продемонстрировал, не включал никаких исключений, но он есть. Есть ли способ сделать это без риска исключения?

1 Ответ

3 голосов
/ 10 июля 2019

reflect Использование ионов не должно использоваться, когда это не обязательно.В большинстве случаев причиной создания component является добавление его в контейнер.Как только он добавлен туда, вы можете легко запросить их из контейнера, используя метод Container#getComponents.

Проверьте этот пример:

JButton loadButton = new JButton("load");
JButton saveButton = new JButton("save");
JPanel panel = new JPanel();
panel.add(loadButton);
panel.add(saveButton);
for (Component component : panel.getComponents()) {
    // ...
}

Чтобы оказать вам дополнительную помощь, вам нужно будет сказать нам, что вы хотите сделать с этим массивом.Я имею в виду, где вы хотите его использовать?


Если вы настаиваете на его использовании, то for должно быть:

for (Field f : this.getClass().getDeclaredFields()) {
    if (JComponent.class.isAssignableFrom(f.getType())) {
        JComponent field = (JComponent) f.get(this);
        components.add(field);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...