Codenameone 如何使使用LayeredLayout布局的两个组件同时接收事件?

Codenameone 如何使使用LayeredLayout布局的两个组件同时接收事件?,codenameone,Codenameone,我使用分层布局覆盖文本区域,在文本区域的右上角有一个小按钮(该按钮用于插入时间戳,以便轻松确定手动文本输入的日期) 我希望小按钮在用户“单击”时接收事件,同时允许用户单击下面的文本区域手动编辑文本。但是,当我使用LayeredLayout时,只有最后添加的组件才会接收事件。这意味着要么只有文本区域处于活动状态,无法按下小按钮,要么可以按下按钮,但用户无法单击文本区域启动编辑。希望描述清楚明白 就我所见,其他现有布局都不适合这种情况。有没有办法做到这一点 提前感谢您的任何想法或建议 两者都在单击时

我使用分层布局覆盖文本区域,在文本区域的右上角有一个小按钮(该按钮用于插入时间戳,以便轻松确定手动文本输入的日期)

我希望小按钮在用户“单击”时接收事件,同时允许用户单击下面的文本区域手动编辑文本。但是,当我使用LayeredLayout时,只有最后添加的组件才会接收事件。这意味着要么只有文本区域处于活动状态,无法按下小按钮,要么可以按下按钮,但用户无法单击文本区域启动编辑。希望描述清楚明白

就我所见,其他现有布局都不适合这种情况。有没有办法做到这一点


提前感谢您的任何想法或建议

两者都在单击时接收事件,我们经常使用这种模式。我假设您试图在编辑时按下按钮,这是有问题的,因为编辑委托将事件指针指向本机OS编辑代码

见:

Form current = new Form("TextAreaButton", BoxLayout.y());

TextArea ta = new TextArea("Text of Text Area");
ta.addActionListener(e -> Log.p("Text is: " + ta.getText()));
Button b = new Button("");
b.addActionListener(e -> ta.setText(""));
FontImage.setMaterialIcon(b, FontImage.MATERIAL_CLEAR);
current.add(
        LayeredLayout.encloseIn(ta,
                BorderLayout.east(b))
);

current.show();

(部分)我的坏习惯。可能是因为编辑textArea时按钮不可点击,所以我尝试并添加了一个setFocusable(true)按钮容器语句。我看到了这个页面,它似乎证实了只有顶层才能抓取事件:。挑战仍然是,当你开始编辑时,按钮变得无效,这是非常糟糕的人体工程学(不直观)。但也许一个解决方案是缩短TextArea并将按钮放在外部,然后将两者包装在一个带有TextArea UIID的容器中,使其看起来像按钮在TextArea内部。我试试看。是的,这是一个有效的解决办法。文本输入是一种非常特殊的情况。我假设您的用例是边缘的X按钮,有一个RFE可以将其本机添加到Codename One中,因为这是平台应该解决的问题,我想您可以参考我不久前提交的RFE。然而,上面的用例不是关于删除文本,而是让按钮插入文本(手动文本输入之前的时间戳)。但对于删除来说,更糟糕的是,一旦你开始编辑,删除按钮就会失效。用户无法理解,除了参考CN1中的技术限制之外,没有其他解释/辩护的方法。我只是尝试了解决方法。需要对边距/填充进行一些调整,使其看起来好像按钮(几乎)在文本区域内,但可行。但是,我并不清楚如何确保在编辑内部TextArea时周围的容器使用TextArea selected样式?