Как пометить элементы списка, когда они являются командами? - PullRequest
1 голос
/ 09 июня 2011

Если я создаю список на основе массива команд, и текст некоторых команд не отображается полностью в списке, хотя список preferredWidth установлен в форму preferredWidth, как их пометить?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Добавьте приведенный ниже класс в свой класс мидлета или создайте для него новый файл класса:

class TickerRenderer extends DefaultListCellRenderer {

private DefaultListCellRenderer selectedRenderer = new DefaultListCellRenderer(false);
private List parentList;

public TickerRenderer() {
    super(false);
}

public boolean animate() {
    if (parentList != null && parentList.getComponentForm() != null) {
        if (selectedRenderer.isTickerRunning()) {
            if (selectedRenderer.animate()) {
                parentList.repaint();
            }
        }
    }
    return super.animate();
}

public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
    if (isSelected) {
        selectedRenderer.getListCellRendererComponent(list, value, index, isSelected);

        // sometimes the list asks for a dummy selected value for size calculations and this might
        // break the tickering state
        if (index == list.getSelectedIndex()) {
            if (selectedRenderer.shouldTickerStart()) {
                if (!selectedRenderer.isTickerRunning()) {
                    parentList = list;
                    list.getComponentForm().registerAnimated(this);
                    selectedRenderer.startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), true);
                }
            } else {
                if (selectedRenderer.isTickerRunning()) {
                    selectedRenderer.stopTicker();
                }
            }
        }
        return selectedRenderer;
    } else {
        return super.getListCellRendererComponent(list, value, index, isSelected);
    }
}
}

Используйте его следующим образом:

List cmdList = new List(cmds);
cmdList.setListCellRenderer(new TickerRenderer());
0 голосов
/ 15 июня 2011

Попробуйте этот код, он покажет список в диалоговом окне при нажатии команды «Показать список», а также включит тикер изначально. Ниже приведен код, который показывает, как использовать вышеупомянутый класс для просмотра тикера в списке, когда список содержится в диалоговом окне.

Не забудьте сделать свой список окончательным, чтобы его можно было использовать во внутренних классах.

form.addCommand(new Command("Show list") { // add command in form and override its actionPerformed method
     public void actionPerformed(ActionEvent evt) {
         Dialog d = new Dialog() {  // create an instance of dialog and make it an inner class so that you can override onShow() method and set focus on list when dialog gets initialized and also can set its index to ur preferred one (here it's 0)
             protected void onShow() { // overriding of onShow() method
                 list.requestFocus();  // set focus on list
                 list.setSelectedIndex(0);  // set selected index to 0
             }
         };
         d.addComponent(list);  // add list in dialog
         d.show();  // show dialog
    } 
 });

Этот код показывает мой список в диалоге и изначально запускает тикер. Если это не поможет, опубликуйте ваш код, я постараюсь его увидеть.

...