I only get 
Exception in thread "AWT-EventQueue-0" Failed to get location on 
screen:component must be showing on the screen to determine its location
Failed to get location on screen:component must be showing on the screen to 
determine its location
Indeed in my code the removal is performed:
editingContainer.remove();
itemListContainer.remove();
fab.remove();

So what could be the reason?

Il giorno venerdì 18 settembre 2020 alle 06:15:30 UTC+2 Shai Almog ha 
scritto:

> Look at the console when debugging this in the simulator. You would 
> probably see exceptions indicating you can't add a component to a Container 
> if it's already added to some container (even if it's the same container). 
> Yes, you need to adapt the code to handle that logic. Orientation change 
> re-layout needs to be slightly different from first showing of the UI. I'd 
> also recommend an animation on orientation change which is something we 
> don't need/want for the first showing of the form.
>
> On Thursday, September 17, 2020 at 12:07:41 PM UTC+3 P5music wrote:
>
>> I created a method like the one you can see below. It is called at 
>> startup and it works. It is also called in the orientation change listener.
>>
>> But when the orientation changes I see that the user interface is cleaned 
>> up and no containers appear, that is, the new rotated interface does not 
>> appear, does not form, it is blank.
>> If there is no call to the remove() methods I get errors like "already 
>> added", and it is reasonable because the containers don't get removed.
>> So the right version has to include the remove() calls. 
>>
>> Hence, I think the code is adding the right containers as it happens at 
>> startup but the user interface is not shown. Why? 
>>
>> private void setContainersAndForm()
>> {
>> editingContainer.remove();
>> itemListContainer.remove();
>> fab.remove();
>>
>>  if (isPortrait() && (editingConditions))
>>         {
>>             new 
>> EditingForm(appData,myData,mainForm,editingContainer,otherParameters).show();
>>             setEditor();
>>
>>         if (isPortrait() && !(editingConditions)
>>         {
>>             removeContainers();
>>             
>> mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int)(1*100)),fab.bindFabToContainer(masterContainer));
>>         }
>>         
>>         if(isTablet() && !isPortrait() )
>>         {
>>
>>            removeContainers();
>>             ((EditingContainer)editingContainer).setCallingForm(mainForm);
>>             
>> mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int)(leftContainerRatio*100)),fab.bindFabToContainer(masterContainer))
>>                     .add( editingContainer);
>>             if (editingConditions) setEditor();
>>
>>         }
>>
>> // also with these two lines
>> //mainEditingContainer.revalidate();
>> //itemListContainer.revalidate();
>>
>> mainForm.revalidate();
>> }
>>
>> Il giorno giovedì 17 settembre 2020 alle 06:15:49 UTC+2 Shai Almog ha 
>> scritto:
>>
>>> Look sat the code for kitchen sink. Notice we encapsulate each demo in a 
>>> Demo class. Then in the main KitchenSink class we show either a Form or a 
>>> Container based on the mode (tablet or phone). Yes it's pretty similar to 
>>> this.
>>>
>>> On Wednesday, September 16, 2020 at 9:54:57 AM UTC+3 P5music wrote:
>>>
>>>> What you say seems to be merging the two things, like I am already 
>>>> doing? Indeed my app is for tablet and phone, so my question was just 
>>>> about 
>>>> the management of these two scenarios, and the orientation too.
>>>>
>>>> Is this what you are advicing?
>>>>
>>>>   if (isPortrait() && (editingConditions))
>>>>         {
>>>>             new 
>>>> EditingForm(appData,myData,mainForm,editingContainer,otherParameters).show();
>>>>             setEditor();
>>>>
>>>>         if (isPortrait() && !(editingConditions)
>>>>         {
>>>>             removeContainers();
>>>>             
>>>> mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int)(1*100)),fab.bindFabToContainer(masterContainer));
>>>>         }
>>>>         
>>>>         if(isTablet() && !isPortrait() )
>>>>         {
>>>>
>>>>            removeContainers();
>>>>             
>>>> ((EditingContainer)editingContainer).setCallingForm(mainForm);
>>>>             
>>>> mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int)(leftContainerRatio*100)),fab.bindFabToContainer(masterContainer))
>>>>                     .add( editingContainer);
>>>>             if (editingConditions) setEditor();
>>>>
>>>>         }
>>>>
>>>> Thanks in advance
>>>> Il giorno mercoledì 16 settembre 2020 alle 04:40:29 UTC+2 Shai Almog ha 
>>>> scritto:
>>>>
>>>>> My advice is to use Containers for everything but have global 
>>>>> navigation logic. So when you need to show a UI element you can invoke 
>>>>> that 
>>>>> single place that decides.
>>>>>
>>>>> If this is on a phone you would create a Form add the container to it 
>>>>> and set its title etc. then show. 
>>>>> If this is a tablet you would replace the last container.and update 
>>>>> the subtitle in the UI
>>>>>
>>>>> On Tuesday, September 15, 2020 at 10:39:40 AM UTC+3 P5music wrote:
>>>>>
>>>>>> So your advice is to use one form for the master/detai in every 
>>>>>> configuration, just managing the container, with the override of the 
>>>>>> back 
>>>>>> button and using the back command to manage the container inside the 
>>>>>> form.
>>>>>> So I have not to do this:
>>>>>>
>>>>>> if (isPortrait() && (*conditionsAreTrue*))
>>>>>> {
>>>>>> new EditingForm(appData,myData,mainForm,editingContainer,other 
>>>>>> parameters).show();
>>>>>> }
>>>>>> (this is what I am trying to do now)
>>>>>>
>>>>>> the form will be just used when a new screen has to be presented, 
>>>>>> like the help form.
>>>>>> Is it right?
>>>>>>
>>>>>> Il giorno martedì 15 settembre 2020 alle 03:50:41 UTC+2 Shai Almog ha 
>>>>>> scritto:
>>>>>>
>>>>>>> You can use setBackCommand and override the hardware back command to 
>>>>>>> have any functionality you want. It can just replace containers and 
>>>>>>> then 
>>>>>>> eventually move a form. You obviously need to keep track of everything 
>>>>>>> which isn't simple. 
>>>>>>>
>>>>>>> On Tuesday, September 15, 2020 at 12:48:15 AM UTC+3 P5music wrote:
>>>>>>>
>>>>>>>> My app needs to manage cases where a back navigation occurs but not 
>>>>>>>> toward the original master/detail form, indeed to a different 
>>>>>>>> orientation 
>>>>>>>> of the editing view itself.
>>>>>>>> For example the editing view in portrait mode is fullscreen and can 
>>>>>>>> undergo a device rotation: in that case the landscape mode is the new 
>>>>>>>> full 
>>>>>>>> screen mode for the editing view, while master/detail is reached back 
>>>>>>>> only 
>>>>>>>> when further back navigation occurs when the user tap the back button.
>>>>>>>>
>>>>>>>> So I thought this has to be accompished with a new form: the 
>>>>>>>> editing form, to which the editing container is added, because I think 
>>>>>>>> it 
>>>>>>>> is the right way to manage back navigation, that is. navigation is 
>>>>>>>> between 
>>>>>>>> forms, back and forth.
>>>>>>>>
>>>>>>>> I ask whether the editing container has to be recreated, or it can 
>>>>>>>> removed from the master/detail form and then added to the editing form.
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>>
>>>>>>>> Il giorno domenica 13 settembre 2020 alle 03:43:59 UTC+2 Shai Almog 
>>>>>>>> ha scritto:
>>>>>>>>
>>>>>>>>> I mean having containers side by side in one form (see the kitchen 
>>>>>>>>> sink where we do just that). 
>>>>>>>>> I don''t recommend having a form embedded in a form. Forms are 
>>>>>>>>> very "heavy" and things sometimes fail when you add a form inside 
>>>>>>>>> another 
>>>>>>>>> form. Historically this was prohibited (we'd throw an exception in 
>>>>>>>>> that 
>>>>>>>>> case) but some use cases for embedding a form do exist. I'd still 
>>>>>>>>> avoid it 
>>>>>>>>> when possible.
>>>>>>>>>
>>>>>>>>> On Saturday, September 12, 2020 at 12:31:31 PM UTC+3 P5music wrote:
>>>>>>>>>
>>>>>>>>>> Thanks, do you mean having two forms side by side, that expands 
>>>>>>>>>> when in portrait mode going full screen singularly, or you mean that 
>>>>>>>>>> I open 
>>>>>>>>>> another form on top of the main form?
>>>>>>>>>> I started creating an editing container that can be added to the 
>>>>>>>>>> main form or to the editing form, so I remove all and then add 
>>>>>>>>>> again. Is 
>>>>>>>>>> this the right way to do that?
>>>>>>>>>>
>>>>>>>>>> Il giorno sabato 12 settembre 2020 alle 07:04:13 UTC+2 Shai Almog 
>>>>>>>>>> ha scritto:
>>>>>>>>>>
>>>>>>>>>>> In some cases you need two forms and in some cases two 
>>>>>>>>>>> containers. 
>>>>>>>>>>> The trick for doing this is to work with two containers and when 
>>>>>>>>>>> necessary wrap them in a Form to enable the two page master detail.
>>>>>>>>>>>
>>>>>>>>>>> On Friday, September 11, 2020 at 3:41:56 PM UTC+3 P5music wrote:
>>>>>>>>>>>
>>>>>>>>>>>> My Codename app has master/detail layout.
>>>>>>>>>>>> According to orientation the detail (editing) or the master can 
>>>>>>>>>>>> stay full screen.
>>>>>>>>>>>> I have to handle many orientation and editing status 
>>>>>>>>>>>> configurations, so sometimes the editing screen will be displayed 
>>>>>>>>>>>> out of 
>>>>>>>>>>>> the master screen in portrait orientation.
>>>>>>>>>>>>
>>>>>>>>>>>> The back navigation (button and other gestures) has to be 
>>>>>>>>>>>> managed in both cases.
>>>>>>>>>>>>
>>>>>>>>>>>> I am not sure if I have to use a main form and two containers, 
>>>>>>>>>>>> or instead two forms, that is, also an EditingForm with the 
>>>>>>>>>>>> EditingContainer inside.
>>>>>>>>>>>> Thanks in advance
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/2fba982c-ba7e-4e18-a544-96a94043817fn%40googlegroups.com.

Reply via email to