0

我试图在带有 lwit 1.5 的标签上设置代码,遇到了这个问题:如果我设置 label.setRTL(true) 然后调用

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

ticker 仅显示标签文本的前 21 个字符,而忽略其余字符。

我试过了:

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

它显示正常,文本从左到右,但是当我在 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);
4

2 回答 2

1

查看 setLabelFor,它会在测试获得焦点时标记测试标签。您可能应该在外观类中全局设置 RTL。

于 2012-04-08T12:07:23.757 回答
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);
    }

这部分不起作用,但我不知道为什么。只是希望有人修复这个错误。

于 2012-04-07T05:55:18.860 回答