5

次のコードを使用して、:でフェードインします。JDialogjavax.swing.Timer

    float i = 0.0F;
    final Timer timer = new Timer(50, null);
    timer.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (i == 0.8F){
                timer.stop();
            }
            i = i + 0.1F;
            setOpacity(i);
        }
    });
    timer.start();

Dialog、目的の効果でうまくフェードインされますが、最後に、次のように表示されIllegalArgumentExceptionます。

 The value of opacity should be in the range [0.0f .. 1.0f]

しかし、問題は私が遠くまで行かないということです、i = 0.8Fそれでどうしてそれは違法な議論になることができますか?
次の行で例外が発生します:setOpacity(i);

助言がありますか?ソリューション?

4

1 に答える 1

8

問題は、浮動小数点数を処理して==いて、浮動小数点で0.8を正確に表すことができないため、それらをうまく機能させないことです。そのため、タイマーが停止することはありません。

を使用し>=ます。または、intのみを使用することをお勧めします。

すなわち、

int timerDelay = 50; // msec
new Timer(timerDelay, new ActionListener() {
    private int counter = 0;

    @Override
    public void actionPerformed(ActionEvent e) {
        counter++;
        if (counter == 10){
            ((Timer)e.getSource()).stop();
        }
        setOpacity(counter * 0.1F);
    }
}).start();
于 2012-04-24T02:14:50.360 に答える