我试图在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);
答案 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);
}
这部分不起作用,但我不知道为什么。希望有人能解决这个问题。