0

こんにちは、描画クラスの変数の色を変更する必要があるアプリケーション (演習) を Java で作成しています。アプリケーションが起動し、色変数で sysout を実行すると、null と表示されますが、たとえばマウスの右ボタンを押すと、コントローラー クラスでは色が変わりますが、描画クラスでは変わりません。私は間違っていますか?

ここにコードがあります

これは、描画クラスの関連部分です

    private Color color;
private ArrayList<Point> p = new ArrayList<Point>();

public Drawing(Color color) {
    this.color = color;
    System.out.println("color  " + color);
}

public void draw(Graphics g) {
    for(int i = 0; i < p.size(); i++) {
        g.setColor(color);
        g.fillRect(p.get(i).x, p.get(i).y, 10, 10);
    }
}

これは私のコントローラーの関連コードです。

Color color; // kleur vasthouden
Drawing draw; // class definieren
private ArrayList<Drawing> tekening = new ArrayList<Drawing>();
int x, y;

public DrawingPanel() {
    setBackground(Color.WHITE); // zorg voor een witte achtergrond.
    this.addMouseListener(this); // control de mouselistener
    draw = new Drawing(color);
}

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

@Override
public void mouseClicked(MouseEvent e) {

    if(e.getButton() == MouseEvent.BUTTON1) {
        Point k = new Point(e.getX(), e.getY());

        draw.addPoint(k);
        System.out.println("punt gezet op " + k);
    }
    if(e.getButton() == MouseEvent.BUTTON3) {
        color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
        System.out.println("new color " + color);
    }
    repaint();
}

誰かが私が間違っていることを理解できることを願っています..

4

4 に答える 4

1

セッターメソッドをクラスに追加し、Drawingマウスの右ボタンをクリックして計算した後、実際の色を渡します。

public void setColor(Color color) {
   this.color = color;
}

そしてコントローラーで:

if(e.getButton() == MouseEvent.BUTTON3) {
    color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
    System.out.println("new color " + color);
    draw.setColor(color);
}
于 2012-12-14T15:26:16.867 に答える
0

それらは別個のクラスであるためcolor、それぞれに別個のオブジェクトがあります。 クラスで public に変更
すると、コントローラ内で作成された新しい色に設定できます。Drawingcolorcolor

color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
draw.color = color;

Drawing クラスでセッターを作成し、それを使用してコントローラーから色を設定することもできます。

public setColor(Color color) {
    this.color = color;
}

さらに、コンストラクターで色を任意の値に設定すると、null として出力されなくなります。

于 2012-12-14T15:26:54.013 に答える
0

コントローラーには色のプロパティがあり、右クリックすると設定されますが、Drawing クラスには設定されません。試す :

if(e.getButton() == MouseEvent.BUTTON3) {
    color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
draw.setColor(color);
于 2012-12-14T15:26:58.007 に答える