有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java CodenameOne浮动操作按钮绑定错误

我的CodenameOne应用程序有一个带有特殊尺寸限制的主/细节布局。 还有一个“加号”按钮,允许创建新项目

主要形式:

FloatingActionButton fab=FloatingActionButton.createFAB(FontImage.MATERIAL_ADD);
...

if(isTablet() && !isPortrait())
    {
        mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int)(leftContainerRatio*100)),masterContainer)
                .add( mainEditingContainer);
        fab.bindFabToContainer(masterContainer); //error here
    } else {
        mainForm.add(masterContainer);
        fab.bindFabToContainer(masterContainer);
    }

运行时,我得到:

 java.lang.IllegalArgumentException: Component is already contained in Container: Container[x=0 y=20 width=2048 height=1514 name=null, layout = TableLayout, scrollableX = false, scrollableY = false, components = [masterContainer, Container]]
at com.codename1.ui.Container.insertComponentAtImpl(Container.java:927)
at com.codename1.ui.Container.insertComponentAt(Container.java:918)
at com.codename1.ui.Container.addComponent(Container.java:840)
at com.codename1.ui.Container.encloseIn(Container.java:250)
at com.codename1.ui.layouts.LayeredLayout.encloseIn(LayeredLayout.java:1099)
at com.codename1.components.FloatingActionButton.bindFabToContainer(FloatingActionButton.java:314)
at com.codename1.components.FloatingActionButton.bindFabToContainer(FloatingActionButton.java:286)
at com.myapp.app.MyApp.start(MyApp.java:186)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.codename1.impl.javase.Executor$3$1.run(Executor.java:258)
at com.codename1.ui.Display.processSerialCalls(Display.java:1331)
at com.codename1.ui.Display.mainEDTLoop(Display.java:1125)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

但是没有添加或绑定FAB的地方,代码片段中显示的地方除外

如果删除绑定方法,则不会显示任何按钮

(应用程序正在模拟器中运行)

有什么问题吗


共 (1) 个答案

  1. # 1 楼答案

    请看以下内容以了解发生了什么:How can I reposition the Floating Button in Codenameone?

    其要点是,当在非表单容器上使用FloatingActionButton时,需要添加其结果。因为你给的容器现在已经包装好了

    所以你的代码应该是:

    if(isTablet() && !isPortrait()) {
       mainForm.add(tl.cc().hp(100).wp((int)(leftContainerRatio*100)), 
                            fab.bindFabToContainer(MasterContainer))
               .add( mainEditingContainer);
    } else {
        mainForm.add(fab.bindFabToContainer(MasterContainer));
    }