Установка состояний кнопок в LWUIT - PullRequest
2 голосов
/ 11 сентября 2011

Я пишу свое первое приложение на 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 Ответ

3 голосов
/ 11 сентября 2011

Вы повторно используете экземпляры объекта стиля, что недопустимо, каждое состояние компонента должно иметь отдельный экземпляр. В LWUIT чаще всего это делают:

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

В качестве альтернативы вы можете реализовать логику в методе:

updateButtonTheme(Style);

и вызвать его как:

updateButtonTheme(button.getUnselectedStyle());
...