0

学校の課題に取り組んでいますが、問題が発生しました :P. 私はこのコードを得ました:

public void mouseEntered(MouseEvent e) {
    MyPanel b = (MyPanel)e.getSource();
    System.out.println("ID: "+b.getId()+"");
    b.setColor(Color.blue);
}

私が得たMyPanelオブジェクトで:

public void setColor(Color kleur) {
    if(this.getBackground()==Color.white) {
        this.setBackground(kleur);
        repaint();
    }
}

マウスでパネルに入ると、入力した色が点滅します。しかし、500個のJpanelを使用してJformでトレイルを描画できるように、色を維持したい(ArrayListに追加しましたが、この部分は正常に機能します)

私は何を間違っていますか?

4

4 に答える 4

1

質問に対する@ErickRobertsonのコメントに基づくと、問題は次のとおりだと思います。

メソッドをMyPanel置き換えますJPanel#paintComponents()。それは可能ですか?もしそうなら、あなたは次のことをすることができます。このMyPanel#setColor(Color)方法では、背景を設定するのではなく、新しい背景色を含むフィールドを設定します。

private Color backgroundColor = Color.white;
public void setColor(Color kleur) {
  backgroundColor = kleur;
  repaint();
}

次に、あなたのMyPanel#paintComponents(Graphics)

@Override
public void paintComponent(Graphics g) {
  super.paintComponent(g);
  // draw background
  g.setColor(backgroundColor);
  g.fillRect(0, 0, getWidth(), getHeight());
  // draw your stuff here
}
于 2012-06-12T12:30:45.407 に答える
0

MouseListenerからパネルを取得しているため、どこに実装されていますかMouseEvent。パネルに を実装しMouseListenerてもらい、いつ色を変更するかをパネルに決定させる方が簡単です。

class Panel extends JPanel implements MouseListener {

    public Panel() {
        // Make sure the listener listens 
        addMouseListener(this);
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        setColor(Color.blue);
    }
    // ... other mouselisteners can be ignored or implemented as needed
}

mouseenter の通知が必要な場合は、他のクラスへの参照を引き続き保持できます。プライベート メンバーを作成し、コンストラクターで参照を設定するだけです。

于 2012-06-12T12:33:10.430 に答える
0
public void setColor(Color kleur) {
    if(this.getBackground()==Color.white) {
        this.setBackground(kleur);
        repaint();
    }
}

== repalce を equals で使用しないで、invalidate( を試してください。コードは基本的に、背景が白い場合にのみ背景を置き換えると言っています???

于 2012-06-12T13:03:03.317 に答える