Получение значения неизвестного компонента

Я строю свой вход GUI динамически в зависимости от того, какой тип ввода требуется, например, так:

Если мне потребуется doubleи boolean то тип компонентов, которые создает графический интерфейс, являются JTextField и JRadioButton,

Я определяю, что я хочу, чтобы метод ввода каждого типа был статически похож на это:

private static Map<InputType, Class<? extends Component>> typeComponentMap = new HashMap<InputType, Class<? extends Component>>();

static {
    typeComponentMap.put(InputType.INTEGER, JTextField.class);
    typeComponentMap.put(InputType.DOUBLE, JTextField.class);
    typeComponentMap.put(InputType.BOOLEAN, JRadioButton.class);
    typeComponentMap.put(InputType.STRING, JTextField.class);
}

Я столкнулся с проблемой при попытке прочитать значение компонента обратно в один из этих типов (в поток)

Мой метод в настоящее время выглядит примерно так:

public static void writeComponentValue(ObjectOutputStream stream, InputType type, Component component)

Теперь нет такого метода, как getValue в java.awt.Component, поэтому я могу видеть только один вариант, который проверяет наличие подкласса с помощью instanceof и идти оттуда... но я надеялся, что есть лучший способ?

Созданный поток предназначен для передачи другому объекту, который предназначен, чтобы ничего не знать о том, как информация о графическом интерфейсе.

2 ответа

Вы можете создать обработчик для каждого типа JComponent, который вам нужно создать, и зарегистрировать его вместо самого JComponent. Каждый обработчик будет иметь getValue метод, который будет вызывать соответствующий метод на его JComponent.

Вы можете реализовать интерфейс, который требует метод getInput и создать подклассы для всех JComponents, которые реализуют интерфейс.

Другие вопросы по тегам