0

Java のコンポーネントに問題があります。問題は、GUI で楕円の色の変化が見られないことです。OVF フラグが false に設定されている場合は白、フラグ OVF が true に設定されている場合は赤になります。しかし、プログラムを開始すると、フラグ OVF が fasle に設定され、すべての楕円が白になります。これは問題ありません。フラグが true に変わるとき、楕円はまだ白です。repaint() 関数を追加しようとしましたが、色を変更せずに白い楕円がまだ点滅しています。クラスKomponentの私のコードは次のとおりです。

import java.awt.*;
import javax.swing.*;

public class Komponent extends JComponent {

    Counter counter3;

    public Komponent() {
        counter3 = new Counter();
    }

    @Override
    public void paint(Graphics g) {
        Graphics2D dioda = (Graphics2D) g;
        int x1 = 85;
        int x2 = 135;
        int x3 = 35;
        int x4 = 185;
        int x5 = 235;
        int x6 = 88;
        int x7 = 138;
        int x8 = 38;
        int x9 = 188;
        int x10 = 238;
        int y_ob = 0;
        int y = 3;
        int width_ob = getSize().width / 9;
        int height_ob = getSize().height - 1;
        int width = (getSize().width / 9) - 6;
        int height = (getSize().height - 1) - 6;
        if (counter3.OVF == true) {
            dioda.setColor(Color.BLACK);
            dioda.fillOval(x1, y_ob, width_ob, height_ob);
            dioda.fillOval(x2, y_ob, width_ob, height_ob);
            dioda.fillOval(x3, y_ob, width_ob, height_ob);
            dioda.fillOval(x4, y_ob, width_ob, height_ob);
            dioda.fillOval(x5, y_ob, width_ob, height_ob);
            dioda.setColor(Color.RED);
            dioda.fillOval(x6, y, width, height);
            dioda.fillOval(x7, y, width, height);
            dioda.fillOval(x8, y, width, height);
            dioda.fillOval(x9, y, width, height);
            dioda.fillOval(x10, y, width, height);
            repaint();
        }
        if (counter3.OVF == false) {
            dioda.setColor(Color.BLACK);
            dioda.fillOval(x1, y_ob, width_ob, height_ob);
            dioda.fillOval(x2, y_ob, width_ob, height_ob);
            dioda.fillOval(x3, y_ob, width_ob, height_ob);
            dioda.fillOval(x4, y_ob, width_ob, height_ob);
            dioda.fillOval(x5, y_ob, width_ob, height_ob);
            dioda.setColor(Color.WHITE);
            dioda.fillOval(x6, y, width, height);
            dioda.fillOval(x7, y, width, height);
            dioda.fillOval(x8, y, width, height);
            dioda.fillOval(x9, y, width, height);
            dioda.fillOval(x10, y, width, height);
            repaint();
        }
    }

    public static void main(String[] arg) {
        new Komponent();
    }
}

助けてください(私の英語でごめんなさい);)

4

2 に答える 2

2

paint() メソッド内で repaint() を呼び出しますか? これは paint() メソッドを再度呼び出し、これは repaint() を再度呼び出す可能性があります。

これがあなたの問題かどうかはわかりませんが、間違った場所で repaint を呼び出していると思います。

于 2013-05-15T11:56:57.663 に答える