lwuit从右到左标签的问题

时间:2012-04-06 12:40:03

标签: java-me lwuit right-to-left ticker

我试图在lwuit 1.5的Label上设置自动收报机,遇到这个问题: 如果我设置label.setRTL(true)然后调用

label.startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), true);

ticker只显示标签文本的前21个字符,忽略其余部分。

我试过了:

label.setRTL(false);
label.startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), true);

它显示OK,文本从左到右,但是当我在FocusListener中设置它时(因为标题会在标签获得焦点时开始并且在它失去焦点后停止)它只是改变方向(从右到右)左)。

这就是我的所作所为:

Label test = new Label();
Container c1 = new Container(new FlowLayout());


test.setText("1234567890ABCDEFGHIJ1234567890");
test.setFocusable(true);
test.setRTL(false);
test.addFocusListener(new FocusListener (){

        public void focusGained(Component cmpnt) {
            ((Label)cmpnt).setRTL(false);
            ((Label)cmpnt).startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), false);
        }

        public void focusLost(Component cmpnt) {
            ((Label)cmpnt).stopTicker();
        }
});
c1.addComponent(test);

2 个答案:

答案 0 :(得分:1)

看看setLabelFor,当测试获得焦点时,它将为测试标记。您应该在外观类中全局设置RTL。

答案 1 :(得分:0)

我发现了问题。错误的方向发生是因为我在将标签添加到容器(c1)之前实现了focusListener。所以我就这样做了:

c1.addComponent(test);
test.addFocusListener(new FocusListener (){

    public void focusGained(Component cmpnt) {
        ((Label)cmpnt).setRTL(false);
        ((Label)cmpnt).startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), false);
    }

    public void focusLost(Component cmpnt) {
        ((Label)cmpnt).stopTicker();
    }
});

它只是起作用。 事实上我从Label类源代码(第149~153行)中得到了这个想法:

// solves the case of a user starting a ticker before adding the component
    // into the container
    if(isTickerEnabled() && isTickerRunning() && !isCellRenderer()) {
        getComponentForm().registerAnimatedInternal(this);
    }

这部分不起作用,但我不知道为什么。希望有人能解决这个问题。