JLabel滚动文本

时间:2016-02-02 16:31:18

标签: java jframe jpanel jlabel

我需要制作一段文字,通过将每个字母从一个jlabel移动到另一个jlabel,沿着页面滚动。到目前为止这是我的代码。它需要一个延迟,因为它太快但它似乎在字符串完成时崩溃。任何帮助将不胜感激?。

ForEach-Object

1 个答案:

答案 0 :(得分:2)

首先。是的,您的应用程序崩溃了。从技术上讲,您在IndexOutOfBoundsException方法中调用input.substring(i, i + 1)时获得run。您可以在无限循环中增加i。因此它会高于你的字符串长度,结果是substring然后抛出该异常 因此,在递增索引时,首先修复是一种限制。

[...]
i = i + 1;
if(i > length - 1)
    i = 0;

下一个修复应该是延迟。但这并不像听起来那么容易。您应该开始学习Threads如何在Java中工作,因为您需要启动它。多数民众赞成因为您永远不应该将主线程发送到睡眠状态,否则您的GUI将不负责任。所以我会给你一个简单的解决方案,并提醒你学习Threads是如何工作的 因此,请删除run方法并更改actionPerformed方法,如下所示:

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == inputTextField) {

        String j = inputTextField.getText();
        // run("abcdef");
        new Thread(new Runnable(){
            @Override
            public void run() {
                int length = j.length();
                int i = 0;
                while (true) {
                    if (output[0] != null) {
                        output[0].setText(j.substring(i, i + 1));
                    } else {
                        output[0].setText("");
                    }
                    i = i + 1;
                    if(i > length - 1)
                        i = 0;                                              
                    try {
                        Thread.sleep(500); // your delay in ms
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }                       
                    shift();                        
                }               
            }           
        }).start();
    }
}