Ok, forget the setSize instructions.
Now you can see that the code below calculate a reasonable rectangle. Debug 
values are x = 1024 y = 767 size = width = 1534 height = 27
Forget also the BrowserComponent. This applies also to when it is not in 
the layout, and also with BoxLayout instead of BorderLayout.
No matter if an InteractionDialog is used instead of a Dialog. 
I ensure you that the result is that tiny dialog you can see in the 
original attached image.

So why the dialog has not the right bounds?

public static void testWebViewAlertDialog(String s1, String s2,int width)
{
Dialog alertDialog=new Dialog(s1);
alertDialog.setDisposeWhenPointerOutOfBounds(true);
Button okButton=new Button(okCommand);

alertDialog.setLayout(BoxLayout.y());
Container c1=new Container();

Command backCommand=new Command("Back") {
@Override
public void actionPerformed(ActionEvent evt) {

alertDialog.dispose();

}
};
alertDialog.setBackCommand(backCommand);

c1.setLayout(new BorderLayout());
//c1.setLayout(BoxLayout.y());

BrowserComponent testWebView=new BrowserComponent();


testWebView.addWebEventListener("onLoad", new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {

c1.add(BorderLayout.SOUTH,okButton);
//c1.add(okButton);


c1.add(BorderLayout.CENTER,testWebView);
//c1.add(testWebView);

Rectangle rect = new Rectangle(getRect(c1));
if (width>rect.getWidth()) rect.setWidth(width);
rect.setHeight(rect.getHeight()+testWebView.getPreferredSize().getHeight());

alertDialog.add(c1);

alertDialog.showPopupDialog(rect);  //x = 1024 y = 767 size = width = 1534 
height = 27
}});
testWebView.setPage(s2,"");

}

Il giorno domenica 20 dicembre 2020 alle 02:55:31 UTC+1 Shai Almog ha 
scritto:

> You can't invoke setX/Y/Width/Height etc. in Codename One. It just won't 
> work for you. 
>
> The layout manager and positioning logic overrides those values to 
> position the windows in resolution neutral locations. This makes the code 
> work seamlessly even if a device is rotated.
> What matters for the size is the preferred size which is (sometimes) used 
> to calculate the actual size.
>
> On Saturday, December 19, 2020 at 5:05:10 PM UTC+2 P5music wrote:
>
>> I mean the rectangle that the showPopupDialog  method  wants as a 
>> parameter.
>> That method simply does not work with certain values, like for example:
>> x = 1024 y = 767 size = width = 1534 height = 27
>> ?
>> Notice that this applies to both InteractionDialogs and Dialogs, with or 
>> without a BrowserComponent inside.
>> Even in this simple Dialog it does not work when I want to enlarge it 
>> horizontally.
>>
>>
>> //this method yields a centered rectangle
>> private static Rectangle getRect(Container c)
>> {
>> Rectangle r=new Rectangle();
>> Dimension d=new Dimension();
>> int w=Display.getInstance().getDisplayWidth();
>> int h=Display.getInstance().getDisplayHeight();
>>
>> d.setWidth(c.getWidth());
>> d.setHeight(c.getHeight());
>> r.setWidth(c.getWidth());
>> r.setHeight(c.getHeight());
>> r.setX(w/2-d.getWidth()/2);
>> r.setY(h/2-d.getHeight()/2);
>> return r;
>> }
>>
>> //this method opens the dialog
>> public static void testAlertDialog(String s1, String s2,int width)
>> {
>> Dialog alertDialog=new Dialog(s1);
>> alertDialog.setDisposeWhenPointerOutOfBounds(true);
>> Button okButton=new Button(okCommand);
>>
>>
>> alertDialog.setLayout(BoxLayout.y());
>> Container c1=new Container();
>> c1.setLayout(BoxLayout.y());
>>
>> Command backCommand=new Command("Back") {
>>
>> @Override
>> public void actionPerformed(ActionEvent evt) {
>>
>> alertDialog.dispose();
>>
>> }
>> };
>> alertDialog.setBackCommand(backCommand);
>>
>> c1.add(okButton);
>>
>> Rectangle rect = new Rectangle(getRect(c1));
>>
>> if (width>rect.getWidth()) rect.setWidth(width);
>>
>> alertDialog.setSize(new Dimension(rect.getWidth(),rect.getHeight()));
>>
>> c1.setSize(new Dimension(rect.getWidth(),rect.getHeight()));
>>
>> alertDialog.add(c1);
>> Rectangle dialogRect=getRect(c1);
>> alertDialog.showPopupDialog(dialogRect);
>> }
>>
>> Il giorno venerdì 18 dicembre 2020 alle 05:56:43 UTC+1 Shai Almog ha 
>> scritto:
>>
>>> Which rectangle?
>>> How?
>>>
>>> On Thursday, December 17, 2020 at 11:24:31 AM UTC+2 P5music wrote:
>>>
>>>>
>>>> No, I meant I set the rectangle, so it has to overwrite any preferred 
>>>> size.
>>>> That InteractionDialog seemed to be missing dimensions and coordinates 
>>>> until I set them with the showPopupDialog(rect) method.
>>>> But
>>>> when I set them, it refuses to adopt that dimensions 
>>>> because it turns up having a strong preferred size it wants to stick to.
>>>> Regards
>>>> Il giorno giovedì 17 dicembre 2020 alle 04:33:35 UTC+1 Shai Almog ha 
>>>> scritto:
>>>>
>>>>> What's pocking a value into the preferred size?
>>>>>
>>>>> On Wednesday, December 16, 2020 at 11:16:13 AM UTC+2 P5music wrote:
>>>>>
>>>>>> Use cases won't work if components do strange things.
>>>>>> I had to use the showPopupDialog(rect) method because the 
>>>>>> InteractionDialog is not able to show itself with the right size. Ok.
>>>>>> Now it seems that it will stick to its preferred size whatever value 
>>>>>> I poke into it, and by the way that value is also wrong because it 
>>>>>> appears 
>>>>>> in a center-right-ish position.
>>>>>>
>>>>>> Il giorno mercoledì 16 dicembre 2020 alle 04:44:10 UTC+1 Shai Almog 
>>>>>> ha scritto:
>>>>>>
>>>>>>> Place a breakpoint in the method and look at the preferred size of 
>>>>>>> the preferred size of the dialog before you show it. I'm guessing it 
>>>>>>> will 
>>>>>>> be small. 
>>>>>>> Showing a browser component in a dialog isn't a use case we ever 
>>>>>>> intended so I doubt this will work.
>>>>>>>
>>>>>>> On Tuesday, December 15, 2020 at 10:38:15 AM UTC+2 P5music wrote:
>>>>>>>
>>>>>>>> As I said the measurement is OK, that is, I have the right 
>>>>>>>> dimensions. Also in the debugging I see the correct values, but it is 
>>>>>>>> the 
>>>>>>>> InteractionDialog that does not resize accordingly. Can you check my 
>>>>>>>> code 
>>>>>>>> as to the size change of the InteractionDialog? All is done after the 
>>>>>>>> page 
>>>>>>>> loading, so it is why the measurements are right but it does not 
>>>>>>>> resize.
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>> Il giorno martedì 15 dicembre 2020 alle 05:15:26 UTC+1 Shai Almog 
>>>>>>>> ha scritto:
>>>>>>>>
>>>>>>>>> Are you placing a BrowserComponent in an interaction dialog?
>>>>>>>>> That's no a great idea.
>>>>>>>>>
>>>>>>>>> BrowserComponent doesn't know its size since it didn't load the 
>>>>>>>>> HTML yet and does it asynchronously. You need to determine the size 
>>>>>>>>> for it 
>>>>>>>>> not the other way around. 
>>>>>>>>>
>>>>>>>>> On Monday, December 14, 2020 at 10:57:09 AM UTC+2 P5music wrote:
>>>>>>>>>
>>>>>>>>>> I had to change the user experience of one form in my app because 
>>>>>>>>>> I couldn't have both a TextArea and a BrowserComponent to have the 
>>>>>>>>>> "fill 
>>>>>>>>>> parent" behaviour.
>>>>>>>>>> I decided to display the webview in an alert dialog.
>>>>>>>>>> The width of the webview has to be as large as the lesser 
>>>>>>>>>> dimension of  screen, that is passed as the width parameter, for 
>>>>>>>>>> example 
>>>>>>>>>> the skin I am testing onto has 1534 (it is the height in landscape 
>>>>>>>>>> mode).
>>>>>>>>>> Also the height of the dialog is calculated to be as large as to 
>>>>>>>>>> display a button and the webview.
>>>>>>>>>>
>>>>>>>>>> But I get the tiny dialog that can be seen in the attached image.
>>>>>>>>>>
>>>>>>>>>> How can this be fixed sticking with InteractionDialog?
>>>>>>>>>>
>>>>>>>>>> Notice that the rectangle has right dimensions, as expected to be 
>>>>>>>>>> in the user interface:
>>>>>>>>>> x = 983 y = 729 size = width = 1534 height = 104 (debug values)
>>>>>>>>>> but the dialog does not spread.
>>>>>>>>>> In the code below there are some utility methods that work 
>>>>>>>>>> seamlessly with other dialogs, to set the correct appearance. Just 
>>>>>>>>>> this 
>>>>>>>>>> dialog is not working.
>>>>>>>>>>
>>>>>>>>>> Thanks in advance
>>>>>>>>>>
>>>>>>>>>> public static void testWebViewAlertDialog( String s1, String 
>>>>>>>>>> s2,int width)
>>>>>>>>>> {
>>>>>>>>>> InteractionDialog alertDialog=new InteractionDialog(s1);
>>>>>>>>>> Button okButton=new Button(R.okCommand);
>>>>>>>>>> alertDialog.setLayout(BoxLayout.y());
>>>>>>>>>> Container c1=new Container();
>>>>>>>>>> c1.setLayout(BoxLayout.y());
>>>>>>>>>>
>>>>>>>>>> okButton.addActionListener(new ActionListener() {
>>>>>>>>>> @Override
>>>>>>>>>> public void actionPerformed(ActionEvent evt) {
>>>>>>>>>> alertDialog.dispose();
>>>>>>>>>> }
>>>>>>>>>> });
>>>>>>>>>> c1.setLayout(new BorderLayout());
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> BrowserComponent testWebView=new BrowserComponent();
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> testWebView.addWebEventListener("onLoad", new ActionListener() {
>>>>>>>>>> @Override
>>>>>>>>>> public void actionPerformed(ActionEvent evt) {
>>>>>>>>>> System.out.println("onload test");
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> c1.add(BorderLayout.SOUTH,okButton);
>>>>>>>>>> alertDialog.add(c1);
>>>>>>>>>> Rectangle rect = getRect(c1);
>>>>>>>>>> c1.add(BorderLayout.CENTER,testWebView);
>>>>>>>>>> if (width>rect.getWidth()) rect.setWidth(width);
>>>>>>>>>>
>>>>>>>>>> rect.setHeight(rect.getHeight()+testWebView.getPreferredSize().getHeight());
>>>>>>>>>> alertDialog.showPopupDialog(rect);
>>>>>>>>>> }});
>>>>>>>>>> testWebView.setPage(s2,"");
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>

-- 
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/f282036a-e702-4976-bfac-f7f3510ce733n%40googlegroups.com.

Reply via email to