正如标题所示,我想创建一个基于 JSON 模式(我实时获取)的 Swing GUI,并使用它来填充 JSONObject(Google SimpleJSON)。我正在考虑使用 Metawidget 框架来实现此目的,但到目前为止还没有成功。我在网上找到了各种参考资料,但似乎没有一个适用于这个特殊情况。示例中总是缺少一些类或方法,而且 Metawidget 的文档也不是很好(至少我无法找到 4.2 版本的一组示例)。我得到的 JSON Schema 描述了在服务器端使用 Jackson 的 JSONSchema 描述的 Java 类,但在本地不可用或可以提前知道,因此也应该处理这个问题。
有人对不同的方法有什么建议,或者我可以使用一些示例/参考吗?当然,使用 Metawidget 4.2 编译的具体代码也更受欢迎。
--- 编辑 --- (由于理查德·肯纳德的回应)
使用提供的代码块,我成功地生成了一个 GUI。但是,我需要修改“json”和“jsonSchema”字符串的值并插入其他值,并切换传递给 CompositeInspector 的检查器的顺序。这是代码和生成的 GUI:
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
String json = "{\"person\": { \"firstname\": \"Richard\", \"surname\": \"Kennard\", \"notes\": \"Software developer\" }}";
String jsonSchema = "{ \"name\": \"person\", \"type\": \"person\", properties: { \"firstname\": { \"required\": true }, \"surname\": { \"required\": true }, \"notes\": { \"large\": true }}}";
final SwingMetawidget metawidget = new SwingMetawidget();
metawidget.setInspector( new CompositeInspector( new CompositeInspectorConfig().setInspectors(
new JsonSchemaInspector( new JsonInspectorConfig().setInputStream( new ByteArrayInputStream( jsonSchema.getBytes() ) ) ),
new JsonInspector( new JsonInspectorConfig().setInputStream( new ByteArrayInputStream( json.getBytes() ) ) )
)));
metawidget.setToInspect( json );
frame.add( metawidget, BorderLayout.CENTER );
frame.setSize(500, 500);
frame.setVisible(true);
这没有使用 MapWidgetProcessor,因为(我想)它需要修改以支持 String 到 JSONObject 的转换。(此外,该代码块中的“NAME”变量未定义,据说需要替换为“elementName”?)
然而,所有这些都引出了几个新问题:
1)为什么“json”中的值没有映射到组件?
2)如果我没有“json”值,而只有“jsonShema”值,应该如何设置?
3)为什么在模式中显式指定属性类型时代码不起作用,例如:
“名字”:{“必需”:true,“类型”:“字符串”}
德玛西亚99
MMTTMM
相关分类