0

私はペイントに似たものを作ろうとしていますが、ちょっとした障害に遭遇しました。基本的に、paintComponent() を呼び出す JPanel でペイントします。ただし、プログラムを実行すると、左上隅に不要なドットが表示されます。プログラムの開始時に paintComponent() が呼び出されるためだと思います。これを無効にする方法はありますか?コードを以下に示します (インポートを削除しました)。お読みいただきありがとうございます。ペイントボード クラスは次のとおりです。

public class PaintBoard extends JPanel implements MouseListener
{
Image img;
//PaintBoard panel;
int circleX = 25;
int circleY = 25;
int x;
int y;

public PaintBoard()
{
    this.addMouseListener(this);
}
public void paintComponent(Graphics g)
{       
    g.setColor(Color.RED);

    g.fillOval(x, y, circleX, circleY);
}
public void mouseClicked(MouseEvent arg0) 
{   
}
public void mouseEntered(MouseEvent arg0) 
{       
}
public void mouseExited(MouseEvent arg0) 
{   
}
public void mousePressed(MouseEvent arg0) 
{
    x = arg0.getX();
    y = arg0.getY();;


    repaint();
}
public void mouseReleased(MouseEvent arg0) 
{   
}

}

そして、ここにメインクラスがあります:

public class Main 
{
JFrame mainFrame = new JFrame("Painting test");
PaintBoard board = new PaintBoard();



public Main() throws IOException
{   
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setSize(1750, 1000);
    mainFrame.setLayout(new GridLayout(2, 2));
    mainFrame.add(board);
    //mainFrame.pack();
    mainFrame.setVisible(true);
}

public static void main(String[] args) throws IOException 
{
    new Main();
}

}
4

2 に答える 2

2

それは少し間違っています。バッファリングされたイメージであるバックバッファが必要です。これは、マウスを押し下げて移動したとき、またはマウスボタンを離したときに描画されます。paintComponentが呼び出されるたびに、このバックバッファーをgraphics.drawなどのコンポーネントにコピーします。

于 2012-07-31T01:46:55.543 に答える
1

問題は、x/y 座標が 0/0 に初期化されていることです。そのため、ペイント メソッドは要求どおりに実行されています。

x/y 座標を認識できる値に設定し、楕円形をペイントしないようにすることをお勧めします。たとえば、-1/-1 のようなものです。

int x = -1;
int y = -1;

public void paintComponent(Graphics g)
{       
    if (x >= 0 && y >= 0) {
        g.setColor(Color.RED);

        g.fillOval(x, y, circleX, circleY);
    }
}

Markusのソリューションはより良いソリューションであることに注意してください。これは問題を解決するだけです

于 2012-07-31T01:54:44.870 に答える