在LWUIT中设置按钮状态

时间:2011-09-11 01:27:44

标签: java-me lwuit

我正在编写我的第一个LWUIT和Java ME应用程序,并尝试让按钮状态起作用。我知道我可以在资源编辑器中完成它,但我真的很想知道为什么我的代码不起作用。我下面的代码表现得似乎不规律。如果我选择第一个按钮,它可以正常工作。当我选择第二个按钮时,该按钮具有所选声明的前景,但是未选择状态的背景。第三个按钮也是如此。但是,当我回绕第一个按钮时,第一个按钮和第三个按钮都具有所选状态的背景,第一个按钮具有所选状态的前景,第三个按钮具有未选择状态的前景。 我已经尝试过阅读教程和在线论坛,但似乎大多数都已经过时了。即使是官方LWUIT页面上的教程也包含了一些被弃用的命令,以至于Netbeans将它们显示为未解析而不是弃用。我确定这是一个简单的错误,但我无法从这段代码中看到其他按钮应该如何受到选择或未选中的影响,或者为什么每次按钮状态发生变化时,选定和未选定的样式都会发生变化。

    Style buttonUp = new Style();
    buttonUp.setAlignment(Component.CENTER);
    buttonUp.setBgColor(0x0082ff);
    buttonUp.setFgColor(0xffffff);
    buttonUp.setMargin(5,5,0,0);

    Style buttonDown = new Style();
    buttonDown.setAlignment(Component.CENTER);
    buttonDown.setBgColor(0xd7d7ee);
    buttonDown.setFgColor(0x000000);
    buttonDown.setMargin(5,5,0,0);        

    Container buttons = new Container(new BoxLayout(BoxLayout.Y_AXIS));
    Button firstButton = new Button("first");
    firstButton.setUnselectedStyle(buttonUp);
    firstButton.setSelectedStyle(buttonDown);
    firstButton.setPressedStyle(buttonDown);

    Button secondButton = new Button("second");
    secondButton.setUnselectedStyle(buttonUp);
    secondButton.setSelectedStyle(buttonDown);
    secondButton.setPressedStyle(buttonDown);

    Button thirdButton = new Button("third");
    thirdButton.setUnselectedStyle(buttonUp);
    thirdButton.setSelectedStyle(buttonDown);
    thirdButton.setPressedStyle(buttonDown);

这应该是所有相关代码,因为它是处理按钮的唯一部分,除了将按钮添加到容器和容器到表单的addComponent调用。

1 个答案:

答案 0 :(得分:3)

您正在重复使用不合法的样式对象实例,每个组件状态必须具有单个实例。在LWUIT中通过以下方式更常见:

button.getUnselectedStyle().setFgColor(...);

或者,您可以在方法中实现逻辑:

updateButtonTheme(Style);

并将其调用为:

updateButtonTheme(button.getUnselectedStyle());