Получение значения неизвестного компонента
Я строю свой вход 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, которые реализуют интерфейс.