1

我目前有一组 TickerSymbol() 对象在我的 Swing JFrame 中滚动屏幕。我不知道如何让它环绕……就逻辑而言。

protected void animate() {
    new Timer(TIMER_DELAY, new TimerListener()).start();
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g.setFont(BG_STRING_FONT);
    g.setColor(Color.LIGHT_GRAY);
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    List<TickerSymbol> tickers = ticker.getTickers();
    synchronized(tickers){
        for(TickerSymbol ts : tickers) {
            //Create formatted string with ticker info
            // This part works fine
            ...
        }
    }

}

private class TimerListener implements ActionListener {
    public void actionPerformed(java.awt.event.ActionEvent e) {
        //TODO need to make the ticker wrap around rather than hard coding.
        if (imgX <= -2000) {
            imgX = getWidth();
        } else {
            imgX -= 1;
        }

        repaint();
    };
}

正如您在上面看到的,我目前已将“imgX”重置为 getWidth() 的位置硬编码。这意味着字符串会将其位置重置到应用程序的右上角。

我尝试使用 Guava 项目中的“Iterables.cycle”,但最终导致内存溢出。

Iterable<TickerSymbol> live = Iterables.cycle(tickers);
        while(live.iterator().hasNext()) {
        ....

任何帮助表示赞赏!

4

1 回答 1

2

查看选取框面板。它允许您滚动包含组件的面板。因此,您可以创建一个面板,其中包含一个包含要滚动的文本的 JLabel,或者您可以向面板添加多个标签,这样您就可以在选取框滚动时动态更新标签。

于 2013-06-24T01:26:16.010 回答