私は、イベントを使ってGUI上のものを変更する方法について学んでいます。私は現在、別のメソッドから渡されたController Eventsを使用しています。これらのメソッドで変数がどのように機能するかについての重要な情報が不足していると思います。これは私のソースコードです(これは現在、内部クラスです)。私がやろうとしている何GUI上の繰り返しの変更
class MyDrawPanel extends JPanel implements ControllerEventListener{
static boolean isWriting = false;
public void controlChange(ShortMessage event) {
isWriting = true;
repaint();
}
public void paintComponent(Graphics g){
if (isWriting){
int red = (int) (Math.random() * 250);
int green = (int) (Math.random() * 250);
int blue = (int) (Math.random() * 250);
g.setColor(new Color(red, green, blue));
int xpos = (int) (Math.random() * 190 + 10);
int ypos = (int) (Math.random() * 190 + 10);
int width = (int) (Math.random() * 50 + 10);
int height = (int) (Math.random() * 50 + 10);
g.fillRect(xpos, ypos, width, height);
//isWriting = false;
}
は、新たな長方形にリスナーがイベントを受信するたびに描くが、私はのみ発生する2つのいずれかを取得することができます。 if文の最後に "isWriting"をfalseに戻そうとすると、if文は偽と評価され続け、四角形を描画しないようです。 isWritingをfalseに設定するコードをコメントアウトすると、描画は1つの矩形に対して機能しますが、変数を元に戻したり、repaintメソッドを呼び出して1つの矩形しか得られません。
イベントを取得するたびにカウントをインクリメントするためにsoutを使用したので、問題がisWriting変数の状態にあるように見えるので、イベントがリスナーに届いています。助けてくれてありがとう!
上の高度なチュートリアルでは、塗装方法の中から、あなたのクラスの状態を変更しないでください。私は明確ではなく、あなたがここで何をしようとしているのか、誘発しようとしている行動は何か。明確にすることはできますか? –
四角形を一定期間だけ表示しますか?その場合は、スイングタイマーを使用してください。または、ユーザーがメッセージの受信を確認したら?次に、他のリスナーを使用します。再度、明確にしてください。 –