如何在一个较大的矩形中获得多个矩形

时间:2019-04-30 00:36:40

标签: java swing jframe awt draw

我正在尝试显示适合较大矩形的最大较小矩形数。我可以显示水平矩形,但是垂直矩形不会显示。我需要帮助弄清楚如何使垂直矩形显示在JFrame中。

以下是主要课程:

import javax.swing.*;

public class MyPanel extends JComponent  {
    public static void main(String[] arguments) {
        LargeRec large = new LargeRec();

        JFrame.setDefaultLookAndFeelDecorated(true);

        JFrame frame = new JFrame("Rectangle");
        frame.setResizable(false);
        frame.setVisible(true);        
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setSize(500,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(large);
    }
}

这是用于创建矩形的类:

import javax.swing.*;
import java.awt.*;
public class LargeRec extends JComponent {
    static int larX;
    static int larY;
    static int smaX;
    static int smaY;

    public static int getRandomIntRange(int min, int max) {
        int x = (int) (Math.random() * ((max + 1 - min))) + min;
        if (x > (max + 1))
            x = max;
        return x;
    }

    public void paint(Graphics g) {
        larX = getRandomIntRange(100, 300);
        larY = getRandomIntRange(100, 300);

        while (larX == larY) {
            larX = getRandomIntRange(100, 300);
            larY = getRandomIntRange(100, 300);
        }

        while (larY > larX) {
            larX = getRandomIntRange(100, 300);
            larY = getRandomIntRange(100, 300);
        }

        smaX = getRandomIntRange(10, 50);
        smaY = getRandomIntRange(10, 50);

        while (smaX == smaY) {
            smaX = getRandomIntRange(10, 50);
            smaY = getRandomIntRange(10, 50);
        }

        while (smaY > smaX) {
            smaX = getRandomIntRange(10, 50);
            smaY = getRandomIntRange(10, 50);
        }

        g.drawRect(0, 0, larX, larY);
        g.setColor(Color.black);
        g.fillRect(0, 0, larX, larY);
        int LX = larX;
        int LY = larY;
        int SX = smaX;
        int SY = smaY;

        for (int nx = 0; nx <= larX; nx = nx + smaX) {
            while (LY >= SY) {
                LY = LY - SY;
                if(LX>=SX) {
                    g.setColor(Color.red);
                    g.drawRect(nx, LY, smaX, smaY);
                }
            }
            LX = LX - SX;
            LY = larY;
        }
        Graphics2D g2 = (Graphics2D) g;
        for (int ny =LX; ny+smaY <=LX ; ny = ny + smaY) {
            while (LY >= SX) {
                g2.setColor(Color.blue);
                g2.drawRect(ny, LY, smaY, smaX);
                LY = LY - SX;
            }
            LY=larY;
        }
    }
}

它应该输出带有较小水平矩形和垂直矩形的黑色矩形。它显示水平(红色)矩形,但不显示垂直(蓝色)矩形。

以下是输出错误的示例:

badframe.png

0 个答案:

没有答案