2011-01-02 7 views
0

タイマーでテキストメッセージを切り替えるjLabelを作成しようとしています。現在、私はアクションリスナーでforループを使用しようとしましたが、成功しませんでした。タイマーを使用して文字列を文字列に表示する

import javax.swing.JPanel; 
import javax.swing.Timer; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JLabel; 
import java.awt.Rectangle; 

public class TimerX extends JPanel{ 

private static final long serialVersionUID = 1L; 
private JLabel jLabelNumber = null; 
private Timer timer = new Timer(100, null); 
private String [] messages = new String [4];{ 
    messages [0] = "HI"; 
    messages [1] = "How"; 
    messages [2] = "Are"; 
    messages [3] = "You"; 
} 


public TimerX() { 
    super(); 
    initialize(); 
} 


private void initialize() { 
    jLabelNumber = new JLabel(); 
    jLabelNumber.setBounds(new Rectangle(99, 85, 38, 16)); 
    this.setSize(300, 200); 
    this.setLayout(null); 
    this.add(jLabelNumber, null); 
    ActionListener updater = new ActionListener(){ 
    public void actionPerformed(ActionEvent event) { 
    for(int i = 0; i<messages.length;i++) 
     jLabelNumber.setText(messages[i]); 
    } 
    }; 
    timer.addActionListener(updater); 
    timer.start(); 
} 

} 

コードには、配列の最後の文字列のみが表示されます。ヘルプT.T

答えて

2

あなたのアップデータActionListenerが実行されるたびに、すべてのメッセージをループし、ラベルテキストを各メッセージに設定します。アップデーターの最後に、最後のメッセージがラベルに表示されます。それは非常に速く起こります、上書きされる前に最初の3つのメッセージが設定されているのを見ることはできません。

次に表示するメッセージを記憶できるActionListenerが必要です。

ActionListener updater = new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
    jLabelNumber.setText(messages[i]); 

    i++; 
    if (i >= messages.length) { 
     i = 0; 
    } 
    } 

    private int i = 0; 
}; 
+0

作品= D!ありがとう。しかし、イメージを変更するためにsetTextからsetIconに変更したい場合は、まだ動作しますか?私は文字列としてイメージの正しいパスを挿入したと仮定? –

+0

画像の配列がある場合は、同じアイデアを使用できます。 –

関連する問題