gpt4 book ai didi

java - 从列表内的容器调用操作

转载 作者:行者123 更新时间:2023-12-01 12:50:41 25 4
gpt4 key购买 nike

我有一个表单,其中有两个列表组件 - 第一个用作菜单,并在应用程序启动时填充(列表中的每个项目都是一个 BlankContainer,其中标签和按钮设置为渲染器)第二个根据用户从菜单中进行选择。因此,我认为可以将操作连接到菜单中的按钮,因此我为其添加了新的操作事件,但问题是操作方法 (onMenuItem_LinkBut​​tonAction) 从未被调用。我做了一些调试,原因是 handleComponentAction 方法中的 rootContainerName 变量始终是父 Form 的名称,而不是 BlankContainer 的名称。

if(rootContainerName.equals("Main")) {
// "Main" is form which contains both Lists
if("linkButton".equals(c.getName())) {
onMain_LinkButtonAction(c, event);
return;
}
}
if(rootContainerName.equals("MenuItem")) {
//MenuItem is my BlankContainer, programm will never pass above condition
if("linkButton".equals(c.getName())) {
onMenuItem_LinkButtonAction(c, event);
return;
}
}

那么有没有办法捕获这样的事件并获取有关触发该事件的 Button 的信息?

最佳答案

由于按钮是无状态的(渲染器用作橡皮图章),因此它不会以这种方式工作。诀窍是监听列表上执行的操作,然后尝试检测按钮是否被按下。

如果您使用GenericListCellRenderer(所有通过GUI构建器创建的渲染器都使用它),您只需将渲染器实例强制转换为GenericListCellRenderer,然后调用extractLastClickedComponent() 并假设返回的按钮不为空,检查它是否与链接按钮匹配。

如果没有,您需要将操作监听器绑定(bind)到链接按钮并切换标志(按下链接),然后在列表的操作监听器中(如果设置了该标志)将其切换回来并执行适当的逻辑。原因是您得到的是无状态的按钮事件,列表事件是重要的部分。

参见http://www.codenameone.com/3/post/2013/12/deeper-in-the-renderer.html

关于java - 从列表内的容器调用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com