Como diminuo o tamanho dos componentes Swing?

2 respostas
T

eu fiz uma tela com uma área de texto, um slider e dois botões, mas gostaria que os botões e o slider ficassem a menor altura possível...

alguem sabe como faz?

olha o código:
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JSlider;
import javax.swing.JTextArea;

/**
 *
 * @author Ton
 */
public class NewJApplet2 extends JApplet {

    private JTextArea pick;
    private JSlider passoSlider;
    private JButton btnApaga;
    private JButton btnReset;

    @Override
    public void init() {
        pick = new JTextArea();        
        btnApaga = new JButton("Apaga");
        btnReset = new JButton("Reset");
        passoSlider = new JSlider(5, 50, 10);
        passoSlider.setBorder(BorderFactory.createTitledBorder("Distância entre pontos"));
        passoSlider.setSize(10, 10);

        Container c=getContentPane();
        GridBagConstraints cons = new GridBagConstraints();
        GridBagLayout layout = new GridBagLayout();
        c.setLayout(layout);

        cons.gridx = 0;
        cons.gridy = 0;
        cons.gridwidth = 3;
        cons.weightx = 1;
        cons.weighty = 0.99;
        cons.fill = GridBagConstraints.BOTH;
        c.add(pick, cons);

        cons.gridx = 0;
        cons.gridy = 1;
        cons.gridwidth = 1;
        cons.weighty = 0.01;
        cons.weightx = 0.70;
        cons.fill = GridBagConstraints.NONE;
        c.add(passoSlider, cons);

        cons.gridx = 1;
        cons.gridy = 1;
        cons.weightx = 0.15;
        c.add(btnApaga, cons);

        cons.gridx = 2;
        cons.gridy = 1;
        c.add(btnReset, cons);
    }
}

2 Respostas

eliangela

não sei se com o GridBagLayout vc conseguirá fazer isso, porque ele ajusta os componentes na tela da melhor maneira possível e ele te deixa sem esse controle.

Com o AbsoluteLayout vc consegue fazer isso: org.netbeans.lib.awtextra.AbsoluteLayout;

ViniGodoy

O problema do AbsoluteLayout é que, assim como o NullLayout, ele não é multiplataforma, nem auto-ajusta quando a tela maximiza.

Algumas dicas com GridLayout:

  1. Ajuste o weight apenas dos componentes que irão se esticar. Geralmente, o único valor que você precisará definir nesse campo é 1 (quando ele for esticar junto com a tela) ou 0 (quando ele se mantém do mesmo tamanho, mesmo que a tela mude). O valor 1 é comum em paineis e textfields.
  2. Para os demais componentes, use a propriedade preferredSize do próprio componente.
  3. Ajuste corretamente o padding, para espaçar os componentes.
  4. Pode ser interessante adicionar um painel embaixo ou na lateral, com o único objetivo de se esticar;
Criado 23 de janeiro de 2010
Ultima resposta 25 de jan. de 2010
Respostas 2
Participantes 3