Codename One 获取和禁用所有组件和子组件
Codename One get and disable all components and sub components
我有一个 Android 应用程序,其中包含多个容器和按钮和标签等其他组件。
该应用程序使用弹出窗口在第一个 运行 时通知用户有关该应用程序及其组件的使用情况。
我想禁用表单和/或里面的所有组件和子组件,直到用户按下弹出对话框的关闭按钮。
我试过使用 form.setEnabled (false)
,但没有用。
form.getComponentCount ()
也只获取容器和工具栏,没有获取容器里面的东西,所以不够。
现在我使用以下代码来禁用组件:
form.setScrollable (false);
for (Component component : containerOne ) {
component.setEnabled(false);
}
for (Component component : containerTwo ) {
component.setEnabled(false);
}
for (Component component : containerThree ) {
component.setEnabled(false);
}
buttonOne.setEnabled(false);
buttonTwo.setEnabled(false);
textFieldOne.setEnabled(false);
textFieldTwo.setEnabled(false);
但这需要大量代码,因为我需要稍后启用这些组件,而且我还使用了几个 类。
我有一种简单的或更简单的方法来实现这一目标吗?
因为您使用对话框,只要它在表单中显示任何内容都是可点击的。
如果你想进一步阻止任何禁用是有问题的,因为它不是递归的。只需覆盖 Form
中的指针 pressed/released 并有条件地阻止它们。他们不会向前传播事件,您可以获得相同的效果,而无需将有问题的样式更改为禁用。
例如:
class MyForm extends Form {
private boolean blockFormEvents;
// ...
@Override
public void pointerReleased(int x, int y) {
if(blockFormEvents) return;
super.pointerReleased(x, y);
}
@Override
public void pointerReleased(int[] x, int[] y) {
if(blockFormEvents) return;
super.pointerReleased(x, y);
}
@Override
public void pointerPressed(int x, int y) {
if(blockFormEvents) return;
super.pointerPressed(x, y);
}
@Override
public void pointerPressed(int[] x, int[] y) {
if(blockFormEvents) return;
super.pointerPressed(x, y);
}
}
您可以在一行代码中使用 ComponentSelector 到 enable/disable 组件。
$("*", rootContainer).setEnabled(false)
$
是 ComponentSelector.select()
的别名
- “*”是一个选择器(类似于 CSS 选择器),表示匹配所有组件。
rootContainer
是一个 Container
对象,用作选择的根。
setEnabled(false)
在搜索结果中的所有组件上设置 enabled=false。
我有一个 Android 应用程序,其中包含多个容器和按钮和标签等其他组件。
该应用程序使用弹出窗口在第一个 运行 时通知用户有关该应用程序及其组件的使用情况。
我想禁用表单和/或里面的所有组件和子组件,直到用户按下弹出对话框的关闭按钮。
我试过使用 form.setEnabled (false)
,但没有用。
form.getComponentCount ()
也只获取容器和工具栏,没有获取容器里面的东西,所以不够。
现在我使用以下代码来禁用组件:
form.setScrollable (false);
for (Component component : containerOne ) {
component.setEnabled(false);
}
for (Component component : containerTwo ) {
component.setEnabled(false);
}
for (Component component : containerThree ) {
component.setEnabled(false);
}
buttonOne.setEnabled(false);
buttonTwo.setEnabled(false);
textFieldOne.setEnabled(false);
textFieldTwo.setEnabled(false);
但这需要大量代码,因为我需要稍后启用这些组件,而且我还使用了几个 类。
我有一种简单的或更简单的方法来实现这一目标吗?
因为您使用对话框,只要它在表单中显示任何内容都是可点击的。
如果你想进一步阻止任何禁用是有问题的,因为它不是递归的。只需覆盖 Form
中的指针 pressed/released 并有条件地阻止它们。他们不会向前传播事件,您可以获得相同的效果,而无需将有问题的样式更改为禁用。
例如:
class MyForm extends Form {
private boolean blockFormEvents;
// ...
@Override
public void pointerReleased(int x, int y) {
if(blockFormEvents) return;
super.pointerReleased(x, y);
}
@Override
public void pointerReleased(int[] x, int[] y) {
if(blockFormEvents) return;
super.pointerReleased(x, y);
}
@Override
public void pointerPressed(int x, int y) {
if(blockFormEvents) return;
super.pointerPressed(x, y);
}
@Override
public void pointerPressed(int[] x, int[] y) {
if(blockFormEvents) return;
super.pointerPressed(x, y);
}
}
您可以在一行代码中使用 ComponentSelector 到 enable/disable 组件。
$("*", rootContainer).setEnabled(false)
$
是ComponentSelector.select()
的别名
- “*”是一个选择器(类似于 CSS 选择器),表示匹配所有组件。
rootContainer
是一个Container
对象,用作选择的根。setEnabled(false)
在搜索结果中的所有组件上设置 enabled=false。