Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于类中字段的javagui_Java_User Interface - Fatal编程技术网

基于类中字段的javagui

基于类中字段的javagui,java,user-interface,Java,User Interface,我需要在运行时基于类字段在Java中生成GUI 我正在处理web服务,所以我需要在客户端动态生成GUI。例如,如果我的web服务上有一个类,该类的字段为字符串名称、整数编号和数组列表,我需要生成一个GUI,该GUI将有两个JTextField和一个JList 是否有任何API或其他东西可以帮助我做到这一点?您正在寻找一种类似“裸体对象”的方法 虽然这种方法非常擅长获得某种初始GUI,但GUI的生成方式往往会导致即使是最微不足道的GUI更改也需要对驱动GUI生成的对象进行更改 这往往与许多方法背道

我需要在运行时基于类字段在Java中生成GUI

我正在处理web服务,所以我需要在客户端动态生成GUI。例如,如果我的web服务上有一个类,该类的字段为
字符串名称
整数编号
数组列表
,我需要生成一个GUI,该GUI将有两个
JTextField
和一个
JList

是否有任何API或其他东西可以帮助我做到这一点?

您正在寻找一种类似“裸体对象”的方法

虽然这种方法非常擅长获得某种初始GUI,但GUI的生成方式往往会导致即使是最微不足道的GUI更改也需要对驱动GUI生成的对象进行更改

这往往与许多方法背道而驰,这些方法旨在当您需要新的GUI功能时,尽量减少重写核心逻辑的需要

既然你已经被警告了,如果你还想踩这颗地雷,我会用psedoocode给你指路

 public Component generateComponent(Object object) {
   Class c = object.getClass();
   Method[] m = c.getDeclaredMethods();
   for (int i = 0; i < m.length; i++) {
      if (m.getName().startsWith("get")) {
        Class returnClass = m.getReturnClass();
        if (returnClass.equals(String.class)) {
           add(new TextBox(...);
        }
      }
   }
 }
公共组件generateComponent(对象){
c类=object.getClass();
方法[]m=c.getDeclaredMethods();
对于(int i=0;i
很快,您就必须决定要包括/排除哪些方法,以及您用来做出决定的机制。然后您必须决定如何显示信息,并且您必须将新的JComponents列表更改为回调相关的“set…”方法


简而言之,这听起来是个不错的主意,直到你做到了。然后它就变成了一个问题,你得到了你想要的而不是你想要的。

我认为这就是你想要的。它通过反射生成GUI。此外,你可以自定义生成的GUI。

你看过java反射吗?注释这也是一个有趣的方法。我不认为我可以用反射API来实现。我试着为我自己的类编写代码,但我不能真正为所有java类型编写代码。首先解决这个问题。首先创建动态GUI,然后从需要使用的类开始构建GUI。动态GUI创建是个问题我可以从类中获取我需要的字段,但我不知道如何将这些字段映射到正确的Swing组件中,而且我在web上找不到任何帮助我的内容。如果您采用这种方法,我强烈建议您使用“裸对象”如果您对这些东西是如何工作的感到好奇,那么本指南的唯一例外是,您真正想要的是使用自己的工具,而不是使用自己的软件.我已经尝试过这种方法,但问题是我必须使用if语句来检查每个可能的类,这样我就可以使用if returnClass.equals(String.Class),然后添加文本框,if returnClass.equals(Boolean.Class)然后添加复选框等等,我需要一些API或库来帮助我将这些类型映射到相应的Swing组件中,我希望你能理解我。对不起,我从来没有听说过裸体对象,我会用谷歌搜索,原因是为你需要的编写软件比编写任何软件都要容易运行时不可预见的需求。即使是裸对象方法最终也必须做出一些权衡,比如使用有限数量的类型到字符串和字符串到类型适配器。我在wiki上读到了这方面的信息,好像它可以帮助我解决我的问题。看起来是这样的;但是,我要警告你,这是一条通往体面解决方案的好途径作为经由月球前往纽约的旅行。尽管它已经面世近十年了,但它并没有引起业界的轰动,这是有原因的。我几乎认为这是一种反模式。