1

こんにちは私はろうそくにJavaSwingタイマーを使用して、ろうそくを燃やします。ろうそくがほぼ底まで燃え尽きる最後の部分を除いて、すべてがうまく機能します。サイズが15とすると、タイマーが停止するはずです。コードを作成しましたが、if / elseステートメントが完全に無視されているようです。誰かが私が間違っていることを教えてもらえますか?

以下に私のコードを示します:(psgetCandleSizeメソッドは長さを500から10>0にし、負の値を取得します)

package h04SelfBurnCandle;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import h02aKaars.DrawCandle;

public class CandlePanel extends JPanel implements ActionListener {

private boolean aan = true;
private int lengte = 500;
private int x;
private int y;
private int speed = 10;
private final int WACHTTIJD = 100; // wachttijd voor de timer

public CandlePanel() {

    javax.swing.Timer autoburn = new javax.swing.Timer(WACHTTIJD,this);

    autoburn.start();

}

DrawCandle candle = new DrawCandle();

@Override
public void paintComponent(Graphics g) {

    super.paintComponent(g);
    x = 10;
    y = getHeight() - (lengte + 10);

    for(int i=0; i < 5; i++) {

        if(lengte > 15){

        candle.drawCandle(g, x, y, lengte, aan);

        }
        else {

            candle.drawCandleBurned(g, x, y, lengte);

        }

        x = x + 70;

        System.out.println(lengte);

    }

}

public int getCandleSize() {

    do {
        lengte -= speed;
    }
    while(lengte > 15);

    return lengte;
}

@Override
public void actionPerformed(ActionEvent e) {

    getCandleSize();
    //System.out.println(lengte);
    repaint();

}

}
4

2 に答える 2

3

呼び出されると、 lengtegetCandleSize()は即座に10に減少します。必要なものはおそらく次のようになります。

public int getCandleSize() {
    if(lengte > 15)
        lengte -= speed;
    else
        autoburn.stop();

    return lengte;
}

注:自動書き込みをローカルからクラスメンバーに変更する必要があります。

于 2012-10-06T19:43:05.437 に答える
1

描画のロジックは、SwingTimerのActionListenerコードに含まれている必要があります。actionPerformedでキャンドルのサイズを変更する必要があります。サイズが最小値よりも小さい場合は、actionPerformedでタイマーを停止します。

于 2012-10-06T19:43:10.613 に答える