有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我所有的形状都卡在我的JPanel的左上角?

我已经创建了一个JPanel,其中充满了圆、线和矩形,它们应该在JPanel周围随机生成,但是圆和矩形只显示在JPanel的左上角,而不是在整个JPanel中随机出现,而线工作得很好。我想知道是否有人能帮我

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

/**
 *
 * 
 */
public class RandomShapesPanel extends JPanel
{
    private Color rColor;
    private Random rGen;
    private Random num;

    @Override
    protected void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    int x = this.getWidth();
    int y = getHeight();
    int x1, y1, x2, y2;
    rGen = new Random();
    num = new Random();
    for(int i = 1; i <= 35; i++)
    {
        rColor = new Color(rGen.nextInt(256),rGen.nextInt(256),
                rGen.nextInt(256));
        g.setColor(rColor);
        x1 = rGen.nextInt(x - 1) + 1;
        x2 = rGen.nextInt(x - 1) + 1;
        y1 = rGen.nextInt(y - 1) + 1;
        y2 = rGen.nextInt(y - 1) + 1;
        g.drawLine(x1, y1, x2, y2);
    }
    for(int i = 1; i <= 35; i++)
    {
        rColor = new Color(rGen.nextInt(256),rGen.nextInt(256),
                rGen.nextInt(256));
        g.setColor(rColor);
        x1 = num.nextInt(50) + 10;
        x2 = num.nextInt(50) + 10;
        y1 = num.nextInt(50) + 10;
        y2 = num.nextInt(50) + 10;
        g.drawRect(x1, y1, x2, y2);
    }
    for(int i = 1; i <= 35; i++)
    {
        rColor = new Color(rGen.nextInt(256),rGen.nextInt(256),
                rGen.nextInt(256));
        g.setColor(rColor);
        x1 = num.nextInt(50) + 10;
        x2 = num.nextInt(50) + 10;
        y1 = num.nextInt(50) + 10;
        y2 = num.nextInt(50) + 10;
        g.fillRect(x1, y1, x2, y2);
    }
    for(int i = 1; i <= 35; i++)
    {
        rColor = new Color(rGen.nextInt(256),rGen.nextInt(256),
                rGen.nextInt(256));
        g.setColor(rColor);
        x1 = num.nextInt(50) + 10;
        x2 = num.nextInt(50) + 10;
        y1 = num.nextInt(50) + 10;
        y2 = num.nextInt(50) + 10;
        g.drawOval(x1, y1, x2, y2);
    }
    for(int i = 1; i <= 35; i++)
    {
        rColor = new Color(rGen.nextInt(256),rGen.nextInt(256),
                rGen.nextInt(256));
        g.setColor(rColor);
        x1 = num.nextInt(50) + 10;
        x2 = num.nextInt(50) + 10;
        y1 = num.nextInt(50) + 10;
        y2 = num.nextInt(50) + 10;
        g.fillOval(x1, y1, x2, y2);
    }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    您必须这样定义这些:

    for(int i = 1; i <= 35; i++)
    {
        rColor = new Color(rGen.nextInt(256),rGen.nextInt(256),
                rGen.nextInt(256));
        g.setColor(rColor);
        x1 = num.nextInt(x-50) + 10;
        x2 = num.nextInt(50) + 10;
        y1 = num.nextInt(y-50) + 10;
        y2 = num.nextInt(50) + 10;
        g.drawRect(x1, y1, x2, y2);
    }