我根据所需的输入类型动态构建GUI的输入,例如:
如果我需要double
和boolean
,则GUI创建的组件类型为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)
现在java.awt.Component
中没有类似 getValue 的方法,所以我只能看到一个选项,即使用instanceof
检查子类并从那里开始。但是我希望有更好的方法吗?
创建的流旨在传递给另一个对象,该对象无法了解有关GUI信息的任何信息。
答案 0 :(得分:0)
您可以实现一个需要getInput方法的接口,并为实现该接口的所有JComponents创建子类。
答案 1 :(得分:0)
您可以为需要创建的每个JComponent类型创建一个处理程序,并注册它而不是JComponent本身。每个处理程序都有一个getValue
方法,可以在它的JComponent上调用适当的方法。