0

問題のコードは次のとおりです。

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

import sun.java2d.loops.DrawRect;

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class Board extends JPanel implements MouseListener
{
//instance variables
private int width;
private int height;
private Block topLeft;
private Block topRight;
private Block botLeft;
private Block botRight;

public Board()  //constructor
{
    width = 200;
    height = 200;
    topLeft=new Block(0,0,width/2-10,height/2-10,Color.RED);
    topRight=new Block(width/2,0,width/2-10,height/2-10,Color.GREEN);
    botLeft=new Block(0,height/2,width/2-10,height/2-10,Color.BLUE);
    botRight=new Block(width/2,height/2,width/2-10,height/2-10,Color.YELLOW);
    setBackground(Color.WHITE);
    setVisible(true);
    //start trapping for mouse clicks
    addMouseListener(this);
}

//initialization constructor
public Board(int w, int h)  //constructor
{
    width = w;
    height = h;
    topLeft=new Block(0,0,width/2-10,height/2-10,Color.RED);
    topRight=new Block(width/2,0,width/2-10,height/2-10,Color.GREEN);
    botLeft=new Block(0,height/2,width/2-10,height/2-10,Color.BLUE);
    botRight=new Block(width/2,height/2,width/2-10,height/2-10,Color.YELLOW);
    setBackground(Color.WHITE);
    setVisible(true);
    //start trapping for mouse clicks
    addMouseListener(this);
}



public void update(Graphics window)
{
    paint(window);
}

public void paintComponent(Graphics window)
{
super.paintComponent(window);
topRight.draw(window);
topLeft.draw(window);
botRight.draw(window);
botLeft.draw(window);


}

public void swapTopRowColors()
{
Color temp = topLeft.getColor(topRight);
topRight.setColor(temp);
repaint();
 }

public void swapBottomRowColors()
{



}

public void swapLeftColumnColors()
{



}

public void swapRightColumnColors()
{



}

この方法を使用して、これらの「正方形」の2つの色をどのように交換します.getColor()か?私はそれを達成するための正しい軌道に乗っていると思っていますが、以前は色でこのようなことをする必要はありませんでした。

4

3 に答える 3

1

を使用する必要がありますsetColor()が、その前に、いずれかの色の温度を作成する必要があります。

public void swapColors(Block g1, Block g2) {
    Color c = g1.getColor();
    g1.setColor(g2.getColor());
    g2.setColor(c);
    repaint();
}

また、このメソッドヘッダーを使用Blockすると、組み合わせごとに異なるメソッドを必要とせずに、オブジェクトから2つの色を交換できます。引数として、交換する2つの色を渡すだけです。

編集:

のBlockクラスにgetterとsetterを追加する必要があるようですので、次を追加するcolorだけです。

public Color getColor() {
    return this.color; 
}

public void setColor(Color c) {
    this.color = c;
}
于 2012-11-08T23:31:59.517 に答える
1
public void swapTopRowColors()
{
    Color temp = topLeft.getColor(topRight);
    topLeft.setColor(topRight.getColor()); //<-- line you're missing
    topRight.setColor(temp);
    repaint();
}

===次のコメント===

Blockクラスにgetterとsetterを追加する必要があります。

public Color getColor() {
    return color;
}

public void setColor(Color color) {
    this.color = color;
}
于 2012-11-08T23:33:42.547 に答える
0

2つのほぼ同一のコンストラクターBoard()とBoard(h、w)があり、デフォルトのコンストラクター呼び出しではsuです。

public Board()  //constructor
{
    Board(200,200);
}

このメソッドを使用する場合、将来的には、両方ではなく1つのコンストラクターのみを編集する必要があります。

于 2012-11-08T23:43:27.990 に答える