Skip to content

JoaoVictorLacerda/DynamicLayout

Repository files navigation

DynamicLayout

DynamicLayout é um gerenciador de layout swing orientado à percentagens de objetos-filho dentro de objetos-pai. Sua utilização é extremamente descomplicada.

  • Objetos-filho: Qualquer objeto swing que está adicionado em outro objeto. Ex: JLabels podem ser filhos de um JPanel e um JPanel pode ser filho de um JFrame.
  • Objetos-pai: Qualquer objeto swing que possui um ou mais objetos em sua composição visual. Ex: JPanel pode ser pai de vários JLabels.

Sobre o DynamicLayout

  • Responsividade: Com o DynamicLayou você poderá desenvolver em swing sem se preocupar com responsividade dos elementos. Basta posicioná-los na sua janela que o DynamicLayout fará todos os cálculos para manter seus objetos swing com as mesmas proporções em relação ao seu objeto-pai.
  • Facilidade: Comece a trabalhar com o gerenciador de layout apenas com uma linha de código passada em objetos-pai.

Baixe o .jar do DynamicLayout

Adicionar dependências ao seu repositório Maven

primeiro adicione o repositório do jitpack

<repositories>
  <repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
  </repository>
</repositories>

Depois adicione a dependência.
Versão 1.1 (Recomendado):

<dependency>
  <groupId>com.github.JoaoVictorLacerda</groupId>
  <artifactId>DynamicLayout-Maven</artifactId>
  <version>v1.1</version>
</dependency>

Versão 1.0:

<dependency>
  <groupId>com.github.JoaoVictorLacerda</groupId>
  <artifactId>DynamicLayout-Maven</artifactId>
  <version>v1.0</version>
</dependency>

Nota da versão 1.1

O que há de novo?
Agora o DynamicLayout também cuidará do redimensionamento das fontes em todos objetos que possuírem um campo de texto. É importante ressaltar que o tamanho da fonte nunca poderá ultrapassar a altura de seu objeto-pai.
Ex: O texto dentro de um JLabel nunca será maior do que a altura do mesmo.

Versão 1.1:

Versão 1.0:

Iniciando

Assista ao exemplo de uso do gerenciador de layout (Clique na imagem):

  • Coloque o .jar disponibilizado nesta documentação no classpath do seu projeto ou adicione a dependência em seu pom.xml (Maven).
    Ao criar um objeto que terá filhos (objeto-pai), basta passar o DynamicLayout como gerenciador de layout, usando o método:
objetoPai.setLayout( new DynamicLayout( width-do-elemento-pai, height-do-elemento-pai ) );
  • Ele recebe dois parâmetros inteiros para fazer os cálculos de posicionamento e dimensões (irá trabalhar com a percentagem que cada objeto-filho possui dentro do objeto-pai ). Feito isso, o objeto será responsável por gerenciar as dimensões, posicionamentos e tamanhos de fontes para os objetos que possuírem textos(versão 1.1.).

Veja um exemplo de implementação em um layout estático (Clique na imagem):

Importante

  • Aviso 1 - Você precisará passar o gerenciador layout antes de adicionar qualquer objeto-filho dentro do objeto-pai. Isso porque o gerenciador trabalha pegando todos os elementos a partir do ponto em que o mesmo foi definido.

  • Aviso 2 - Diferente de outros gerenciadores de layout, o DynamicLayout precisa que o programador posicione os elementos na tela para que o algoritmo possa trabalhar com essas informações e calcular as posições e dimensões sempre que o elemento pai for redimensionado. Um exemplo de como posicionar elementos filhos dentro de elementos pai é a linha de código abaixo:

objetoFilho.setBounds( localização x, localização y, width, height );
  • Aviso 3 - Quando queremos colocar um JScrollPane em um JPanel, é comum definir um preferredSize passando-lhe uma nova dimensão que irá mudar as dimensões do JPanel, porém, só ficará visível quando implementarmos o JScrollPane. Nesse caso, é de extrema importância que o DynamicLayout seja alimentado com as novas dimensões passadas no preferredSize. Se isso não for implementado, o DynamicLayout passará a dispor os objetos por toda área do JPanel. Um exemplo abaixo:
seuPainel.setBounds( 230, 65, 440, 430 );  
seuPainel.setPreferredSize( new Dimension( 0, 630 ) ); 
sePainel.setLayout( new DynamicLayout( 440, 630 ) );  

Perceba que esse código só altera a altura no preferredSize, seguindo a lógica, você só irá precisar passar a altura "atualizada" no DynamicLayout.

Recomendação

  • Quando a tela for redimensionada para menor, existe uma possível chance das medidas dos objetos-filhos(width e height)
    não conseguirem suportar o(s) conteúdo(s) do mesmo ou, o(s) conteúdo(s) (textos por exemplo) ficarem muito pequeno(s)(uma vez que as medidas do objeto-pai estão diretamente relacionadas com as do objeto-filho). Para não correr o risco desse problema acontecer no seu projeto, faça uso da função:
JFrame.setMinimumSize( new Dimension( width, height ) );

Essa função irá delimitar o tamanho mínimo que uma janela poderá chegar( ficará à critério do programador ).

  • O mais recomendado a ser feito é desenvolver com o DynamicLayout desde o zero. Pode ser que precise alterar as dimensões de alguns objetos ao usar o DynamicLayout em um projeto pronto (estático)

Entendendo a lógica

  • Se um objeto-filho que tem a largura de 10px e está dentro de um objeto-pai
    que possui 100px de largura, logo, pode-se entender que o objeto-filho ocupa
    10% do objeto-pai. Quando o pai é redimensionado, a porcentagem não mudará,
    o objeto-filho ainda possuirá 10% do objeto-pai, porém, quando o pai é redimensionado
    o 10% do filho não valerá mais 10. A mesma coisa acontece com a altura, localização x e y e as fontes (na versão 1.1)

Situação exemplo:

10% de 100 = 10;
10% de 200 = 20.

Projetos que fazem uso:

Entre em contato

victorqueiroz90@outlook.com

About

DynamicLayout is a swing layout manager oriented by percentages of child objects within parent objects.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages