这个示例项目(下载了"概要")项目)显示了一个不滚动的BrowserComponent。
顺便说一下,裸骨架项目(由他们的在线模板生成器创建)不能工作(!),因为缺少一个文件。我将该文件从我的另一个CN1项目(实际上来自本期)复制到示例项目中,现在它可以编译了。public class MyApp extends Lifecycle
{
@Override
public void runApp()
{
Form hi = new Form("Hi World", new BorderLayout());
//Form hi = new Form("Hi World", new BoxLayout.y()); alternate version
hi.setScrollable(false); //you can also comment this one
hi.setScrollableY(false);//you can also comment this one
hi.setScrollableX(false);//you can also comment this one
Button helloButton = new Button("Hello World");
hi.add(BorderLayout.NORTH,helloButton);
//hi.add(helloButton); alternate version
helloButton.addActionListener(e -> hello());
hi.getToolbar().addMaterialCommandToSideMenu("Hello Command",
FontImage.MATERIAL_CHECK, 4, e -> hello());
Container mainContainer=new Container(new BorderLayout());
BrowserComponent bc=new BrowserComponent();
bc.setScrollable(true);
bc.setScrollableY(true);
bc.setPage("<HTML><BODY><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P></BODY></HTML>",""); // it's a long page so it can be scolled
//mainContainer.add(BorderLayout.CENTER,bc); alternate version
//hi.add(BorderLayout.CENTER,mainContainer); alternate version
hi.add(BorderLayout.CENTER,bc);
hi.show();
}
private void hello() {
Dialog.show("Hello Codename One", "Welcome to Codename One", "OK", null);
}
}
我是否错过了一些重要的东西,使它可以通过触摸用户滚动?
我编译了几个不同的版本,包括在表单或容器内居中BC等等(参见注释行)。
我在CN1模拟器和一个真正的Android设备(服务器构建)上测试了它,它是不可滚动的(文本被选中)。我遵循了他们所有的建议,所以BC在BorderLayout中居中,窗体设置为不可滚动。
我记得我的真正的应用程序在某些时候是工作的。现在我测试了我的应用程序,我看到它不工作,所以我做了这个示例应用程序。也许我错了。
这不是初学者的问题,这是关于BC的问题。我知道这样的组件在很多系统上都很脆弱,比如像SwiftUI这样重要的系统,但是当然在CN1。
在CN1模拟器上,滚动条总是出现,所以我可以测试它,并且通过使用滚动条,BC是可滚动的。但是鼠标事件没有被正确处理。
在我的实际项目中,我有许多解决方法来处理BC内部的鼠标事件,但这里的示例项目是一个非常简单的项目,只有BC。
不太可能是由于最近的一些更新来修复其他东西而破坏了BC。
那么现在的解决方案是什么?
您将浏览器组件包装器设置为可滚动的,这有效地阻止了浏览器组件内的本机滚动。只要不调用任何setScrollable
,滚动就可以在边框布局的情况下工作。