Olá TerraSkilll,
Então, vou exemplificar mais ou menos como estou pensando em fazer inicialmente e aí exponho minhas dúvidas iniciais.
Tô pensando em fazer uma Classe para representar o “plano base”, ou seja, aquele retângulo da primeira imagem, que no caso vai ser realmente o “plano base” para o restante do desenho, a instância desta classe irá conter então as informações de largura e altura que serão usadas para desenhar o retângulo inicial. Também farei uma Classe de “sub-plano”, esta irá representar cada retângulo que será desenhado dentro do “plano base”. Aí na hora de fazer o desenho, uso os dados do “plano base” e a lista de “sub-planos” que estará contida no “plano base”.
Classe Plano.java
:
public class Plano {
private double altura;
private double largura;
private List<SubPlano> subPlanos;
public Plano(double altura, double largura) {
this.altura = altura;
this.largura = largura;
}
public void acionarSubPlanos(SubPlano subPlano) {
if (subPlanos == null) {
subPlanos = new ArrayList<>();
}
subPlanos.add(subPlano);
}
public void removerSubPlanos(SubPlano subPlano) {
if (subPlanos != null) {
subPlanos.remove(subPlano);
}
}
public List<SubPlano> getSubPlanos() {
return subPlanos;
}
public double getAltura() {
return altura;
}
public void setAltura(double altura) {
this.altura = altura;
}
public double getLargura() {
return largura;
}
public void setLargura(double largura) {
this.largura = largura;
}
}
Classe SubPlano.java
:
public class SubPlano {
private double altura;
private double largura;
public SubPlano(double altura, double largura) {
this.altura = altura;
this.largura = largura;
}
public double getAltura() {
return altura;
}
public void setAltura(double altura) {
this.altura = altura;
}
public double getLargura() {
return largura;
}
public void setLargura(double largura) {
this.largura = largura;
}
}
Fiz o seguinte teste, por enquanto, crio um “plano base” e adiciono à ele um “sub-plano”:
Plano plano = new Plano(400.0, 500.0);
SubPlano subPlano1 = new SubPlano(100.0, 200.0);
plano.acionarSubPlanos(subPlano1);
Fiz também uma Classe
para ser o “painel” onde será desenhado:
public class DrawingPane extends JPanel {
private Graphics2D g2;
private Plano planoBase;
public DrawingPane(Plano plano) {
this.planoBase = plano;
}
public void paintComponent(Graphics g) {
g2 = (Graphics2D) g;
g2.drawRect(100, 50, (int) planoBase.getLargura(), (int) planoBase.getAltura());
for (SubPlano subPlano : planoBase.getSubPlanos()) {
paintSubPlanos(subPlano);
}
}
public void paintSubPlanos(SubPlano subPlano) {
g2.drawRect(100, (((int) planoBase.getAltura()) - 50), (int) subPlano.getLargura(), (int) subPlano.getAltura());
}
}
Claro que este teste, tem apenas um “sub-plano” então fiz o cálculo manual das coordenadas de onde ele será desenhado:
No g2.drawRect(x, y, largura, altura)
usei para a coordenada x
o 100
que é a mesma coordenada
do “plano base”, para o y
peguei a largura do “plano base” e diminui os 50
que era a coordenada y
do “plano base” (desta forma vai desenhar na parte de baixo do “plano base”):

Aí já entra minha primeira dúvida, mas e se ao invés de um único “sub-plano” eu tiver dois, três ou quantos for possível colocar dentro do “plano base”, como automatizar este cálculo das coordenadas?