4

画像操作の実験をしようとしています。基本的に、タイマーによって継続的に更新される画像があり、その画像を JLabel に表示します。

私の問題は、JLabel が画像を更新しないことです。

これが私のタイマーコードです:

Timer timer = new Timer(200, new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            count++;

            System.out.println("timer");
            System.out.println(filename);

            ImageIcon icon = new ImageIcon(filename);

            label = new JLabel();
            label.setIcon(icon);
            label.setText(""+count);

            panel = new JPanel();
            panel.add(label);

            frame.getContentPane().removeAll();
            frame.getContentPane().add(panel);

            frame.repaint();
            frame.validate();

            try{
                FileWriter fstream;

                fstream = new FileWriter(filename,true);

                BufferedWriter out = new BufferedWriter(fstream);

                out.write("text to append");
                out.close();
            }catch (Exception ex){
                System.err.println("Error: " + ex.getMessage());
            }
        }
    });

ファイル名は私の画像へのパスです。

画像は表示されますが、JLabel が画像を更新しません。私は自分のコードをテストし、2 つの異なる画像を切り替えると動作します...

編集:

最後に画像を作成するたびに複製し、タイムスタンプで名前を変更することで解決しました。

4

1 に答える 1

6
label = new JLabel();
label.setIcon(icon);
label.setText(""+count);

panel = new JPanel();
panel.add(label);

frame.getContentPane().removeAll();
frame.getContentPane().add(panel);

frame.repaint();
frame.validate();

すべてを次のように置き換えます。

label.setIcon(icon);

その時点でラベルが表示されない場合は、それを外部クラスのクラス属性として宣言するか、frame(そのスニペットで明らかにアクセス可能な) と同じレベルで宣言します。

于 2012-05-04T09:32:47.437 に答える