-1

こんにちは私はJavaで対角線を描画しようとしていますが、これは正常に機能しません。

「value」変数は毎回forループで更新されますが、次の値を取得します

たとえば、1を挿入すると、system.out.println(value)を使用してコンソールにこれが表示されます。

2 4 8 16 32 641282565121024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304

ただし、変数「value」には、挿入する値が含まれている必要があります。これに使用するコードは、以下にあります。

DrawLines line = new DrawLines();
int value = 0;
public void paintComponent(Graphics g) {

    super.paintComponent(g);

    int xPos = 0;
    int yPos = getHeight() - (getHeight() / 2);

    for(int aantalLines = 0; aantalLines < 10; aantalLines++ ) {
        line.drawLines(g, xPos, yPos + value, getWidth(), getHeight() - value );
        value += value;
        System.out.println(value);
        System.out.println(aantalLines);
    }

}

public void actionPerformed(ActionEvent e) {

    try {
        value = Integer.parseInt(tussenRuimte.getText());
        repaint();
    }
    catch(NumberFormatException err) {
        JOptionPane.showMessageDialog(null, "Number Format Error: Vul alles goed in s.v.p");
    }

}

問題は、それがこのように機能しないことです..誰かが私が間違っていることとこれを修正する方法を説明できますか?

4

2 に答える 2

2

valuepaintComponent メソッド内で from の値を変更しないでください。代わりに、それを paintComponent メソッドにローカルな別の変数にコピーし、その変数を使用して変更します。このように、 が呼び出されるたびにpaintComponent(...)、値が保持する int を再設定しません。

例えば、

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    int xPos = 0;
    int yPos = getHeight() - (getHeight() / 2);
    int localValue = value;

    for(int aantalLines = 0; aantalLines < 10; aantalLines++ ) {
        line.drawLines(g, xPos, yPos + localValue, getWidth(), getHeight() - localValue );
        localValue += localValue;
        // System.out.println(value);
        // System.out.println(aantalLines);
    }
}
于 2012-09-28T17:11:39.080 に答える
1

valueすでにループ変数があるときにの値を変更する理由:

for(int aantalLines = 0; aantalLines < 10; aantalLines++ ) {
  line.drawLines(g, xPos,       yPos +        ((aantalLines + 1) * value), 
                    getWidth(), getHeight() - ((aantalLines + 1) * value) );
}

これは、@Hovercraftがすでに提案したものに帰着するはずです。

これらの解決策のいずれも役に立たない場合は、おそらくどこか別の場所で問題が発生しています。

paint注: 、、paintComponent...メソッドで状態を変更しないでください。何回、いつ呼び出されるかを制御することはできません

于 2012-09-28T17:44:07.927 に答える