Codename One传递theme参数至AjoutBlogForm时类型不兼容报错
问题解决:类型不匹配错误(resources cannot be converted to Blog)
错误原因
你的AjoutBlogForm类构造函数声明接收Blog类型参数,但在MyApplication的start方法中传入的是theme(属于Resources类型),两者类型不兼容导致编译错误。而且从AjoutBlogForm的代码来看,构造函数并未使用传入的Blog参数,该参数属于冗余定义。
解决方案
方案1:修改构造函数接收Resources参数
如果需要在表单中使用主题资源,直接调整构造函数参数类型为Resources,可将主题传递给父类或用于组件样式设置:
public class AjoutBlogForm extends BaseForm { Form current; // 修改构造函数参数为Resources类型 public AjoutBlogForm(Resources theme) { super("Newsfeed", BoxLayout.y()); // 可在此处使用theme设置表单主题 setTheme(theme); Toolbar tb = new Toolbar(true); current = this ; setToolbar(tb); getTitleArea().setUIID("Container"); setTitle("Ajout Blog"); getContentPane().setScrollVisible(false); // 后续组件代码保持不变 } // 其余方法保持不变 }
方案2:改为无参构造函数
如果无需传递任何参数,直接改为无参构造,调用时无需传参:
public class AjoutBlogForm extends BaseForm { Form current; public AjoutBlogForm() { super("Newsfeed", BoxLayout.y()); Toolbar tb = new Toolbar(true); current = this ; setToolbar(tb); getTitleArea().setUIID("Container"); setTitle("Ajout Blog"); getContentPane().setScrollVisible(false); // 后续组件代码保持不变 } // 其余方法保持不变 }
同时修改MyApplication的start方法:
public void start() { if(current != null){ current.show(); return; } // 调用无参构造方法 new AjoutBlogForm().show(); }
方案3:若需传递Blog参数(编辑场景)
如果该表单用于编辑博客,调用时需传入Blog对象(比如新建空对象):
public void start() { if(current != null){ current.show(); return; } // 传入空Blog对象 new AjoutBlogForm(new Blog()).show(); }
注意此场景下,需要在AjoutBlogForm构造函数中使用传入的Blog对象,比如填充表单字段。
验证修改
完成上述任意一种修改后,重新编译项目即可正常加载表单并实现博客添加功能。
内容的提问来源于stack exchange,提问作者Ons kh
相关产品推荐
相关产品推荐

