1

私はばかであることを知っているので、それを理解することはできませんが、paintComponentを使用してランダムなサイズと位置で長方形の束をペイントしようとしています。それらすべてがフレーム内にペイントされていることを確認しようとしています。次のコード(スニペット)でそれを行うことができますが、プログラムに数値をハードコーディングするよりも良い方法があるかどうか疑問に思っています。私が探しているのかもしれない、私が見なければならない方法はありますか?

paintComponent()メソッドをオーバーライドする内部クラスは次のとおりです。

class DrawPanel extends JPanel {
    public void paintComponent(Graphics g) {
        int red = (int)(Math.random()*256);
        int blue = (int)(Math.random()*256);
        int green = (int)(Math.random()*256);

        g.setColor(new Color(red, blue, green));
        //The following 4 lines keep the rects within the frame
        //The frame is 500,500
        int ht = (int)(Math.random()*400);
        int wd = (int)(Math.random()*400);

        int x = (int)(Math.random()*100);
        int y = (int)(Math.random()*100);

        g.fillRect(x,y,ht,wd);
    }
}
4

3 に答える 3

4

プログラムに数字をハードコーディングするよりも良い方法があるかどうか疑問に思っています。

はいあります

  • getSize()囲んでいる JPanel である DrawPanel を呼び出すと、描画されているコンポーネントの実際の境界を確認できます。(編集:またはgetWidth()getHeight()ルーカスが推奨するように-彼の答えに1+!)。
  • paintComponent(...)また、通常は、子のオーバーライド内でスーパーのメソッドを呼び出したいと思うでしょう。
  • また、通常は、GUI のサイズを変更するたびに四角形を変更しないように、DrawPanel のコンストラクターなどでランダム化を行う必要があります。
于 2012-12-08T16:51:06.763 に答える
4

DrawPanelコンポーネントのサイズに基づいて座標とサイズを決定する必要があります。また、代わりにRandom.nextIntMath.random()を使用すると、パネルの現在のサイズに基づいて範囲内に収まりやすくなります。

Random random = new Random();
int ht = random.nextInt(getHeight());
int wd = random.nextInt(getWidth());

int x = random.nextInt(getWidth() - wd);
int y = random.nextInt(getHeight() - ht);
于 2012-12-08T16:53:29.323 に答える
2

作業中のパネルの長さと幅を取得する方法があります。

getHeight();
getWidth();

これらは、作業中の JPanel の現在のサイズを返します。つまり、ウィンドウのサイズを変更しても、実際にはまだ内部に描画されます。

http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#getWidth ()

于 2012-12-08T16:51:39.493 に答える