Java Timer未知事件

时间:2016-03-05 23:50:06

标签: java swing events timer hang

当我在程序中执行以下方法时,一些组件会在计时器用完时更改。例如,我在jTextArea中创建了大小的更改,而没有包含构造的任何事件来更改其大小。如果我首先展开jTextArea然后启动计时器,则无关紧要,反之亦然。

//Show Debug Information for given Seconds with given Text
void giveUserInformation(String input, boolean function, int duration) {
    //Debug information and label visibility handling
    jLabelDebug.setVisible(true);
    jLabelDebug.setText(input);

    //Image
    if (function)
        jLabelDebug.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/images/ok-icon.png")));
    else
        jLabelDebug.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/images/Actions-edit-delete-icon.png")));

    //Show duration
    if (timerShowDurationRuns) {
        timerShowDuration.cancel();
        timerShowDuration = new Timer();
    }

    timerShowDurationRuns = true;
    //fadeIn();
    timerShowDuration.schedule(new TimerTask() {
        @Override
        public void run() {
            jLabelDebug.setVisible(false);
            timerShowDurationRuns = false;
            //fadeOut();
        }
    }, duration * 1000);
    setCursor(Cursor.getDefaultCursor());
}

1 个答案:

答案 0 :(得分:1)

创建JTextArea时,您应该使用如下代码:

JTextArea textArea = new JTextArea(5, 30);

现在,文本区域将能够确定其首选大小,并在您向其添加文本时保持固定。

然后,当您将其添加到GUI时,您可以使用以下代码:

frame.add( new JScrollPane( textArea ) );

现在,当您添加更多数据时,文本区域大小将保持固定,但在需要时将显示滚动条。