Как получить несколько прямоугольников в одном большем - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь отобразить максимальное количество меньших прямоугольников, которые поместятся в больший.Я могу заставить горизонтальные прямоугольники отображаться, но вертикальные прямоугольники не будут отображаться.Мне нужна помощь в выяснении того, как получить вертикальные прямоугольники для отображения в 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);
    }
}

Это класс для созданияrectangle's:

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

...