Ajustar componentes de GUI

3 respostas
fer.ferreira6

Galera, to com dificuldades em ajustar os componentes da Gui,

Por exemplo, quando crio um JTextArea e um JLabel, ao maximinizar ou minimizar a tela, os componentes não se ajustam de acordo.
Tentei usar FlowLayout() e borderLayout(), mas sem sucesso.

Alguêm tem alguma dica?

3 Respostas

fer.ferreira6

Consegui usando o GridLayout(), mas se alguêm tiver outra dica =D

discorpio

Boa noite Fer.ferreira6

Existe também o GridBagLayout.

Com ele, voce pode colocar componentes através de linha e coluna, pode ocupar mais de uma linha ou coluna.

Eu fiz uma classe de diagramação com ele, e que tem resolvido muito a minha vida, eis a classe:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JPanel;

public class ContentLayout extends JPanel {

    // Definição do Layout e constraints do Layout
    private GridBagLayout layout;
    private GridBagConstraints constraints;
    public final int horizontal = GridBagConstraints.HORIZONTAL;
    public final int both = GridBagConstraints.BOTH;

    //Construtor do objeto (como o mesmo nome da classe)
    public ContentLayout(){
       layout = new GridBagLayout();
       setLayout(layout);
       constraints = new GridBagConstraints();
       constraints.weightx = 0;
       constraints.weighty = 0;
       constraints.insets = new Insets(5,5,5,5);
    }

    // Método que acrescenta o componente
    public void addComponent(Component comp, int row, int column, int width, int height, int fill){
        constraints.fill = fill;
        constraints.gridx = column;
        constraints.gridy = row;
        constraints.gridwidth = width;
        constraints.gridheight = height;
        layout.setConstraints(comp, constraints);
        add(comp);
    }

}

O método addComponente recebe 6 parâmetros, que são na seguinte ordem:

onde a qde_colunas é a quantidade de colunas que o componente vai ocupar e qde_linhas, a quantidade de linhas que ele vai ocupar e a direção que ele vai se orientar.

Voce deve usá-lo assim:

import componentes.ContentLayout;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JFrame;

public class FramePrincipal extends JFrame {


    public FramePrincipal(){
        super("Cadastro de Visitantes");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setContentPane(getContainer());
        setLocationRelativeTo(null);
        pack();
        setVisible(true);
    }
    

    private ContentLayout getContainer(){
        // instanciando o diagramador
        ContentLayout layout = new ContentLayout();

        JLabel lblnome = new JLabel("Nome");
        layout.addComponente(lblnome, 0, 0, 1, 1, layout.horizontal);

        JLabel lblobs = new JLabel("Observação");
        layout.addComponent(lblobs, 0, 1, 1, 1, layout.horizontal);

        JTextField txtnome = new JTextField();
        txtnome.setColumns(20);
        layout.addComponent(txtnome, 1, 0, 1, 1, layout.horizontal);

        JTextArea memobs = new JTextArea();
        memobs.setColumns(20);
        layout.addComponent(memobs, 1, 1, 1, 3, layout.horizontal);

        JLabel lbltel = new JLabel("Telefone");
        layout.addComponente(lbltel, 2, 0, 1, 1, layout.horizontal);
        
        JTextField txtel = new JTextField();
        txtel.setColumns(20);
        layout.addComponent(txtel, 3, 0, 1, 1, layout.horizontal);
        
        return layout;
    }

}

Rode esse programa e verá que o JTextArea memobs ficará na linha 1, coluna 1 e ocupará um coluna a direita e tres linhas abaixo.

fer.ferreira6

Boa noite discorpio.

Sua classe é bem interessante e bem clara.
Consegui entender alguns fundamentos que não entendia antes.

Obrigado mesmo.

Criado 31 de julho de 2010
Ultima resposta 1 de ago. de 2010
Respostas 3
Participantes 2