Gerenciador de Layout

tipo, eu ja projeto layouts em HTML a mto tempo, la eu consigo monta praticamente de td… mas no java eu to apanhando feio…

tipo, meu layout tem 3 componentes (2 textarea e 1 button)

eu quero algo simples, 1 textarea fica em cima, e preenche todo o espaco restante, a outra textarea e o botao ficam em baixo, ao lado um do outro, o botao com altura e largura definida, a 2 textarea tem altura definida, mas n largura… nada melhor q um desenho neh:

aproveitando, vo escreve como eu faria isso + - em HTML:

[code]

textarea1 aki
textarea2 aki botao aki
[/code]

por swing eu tentei dessa maneira(to postando apenas a parte do codigo q interessa):

[code]gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridwidth = 2;
addComp(c, new JScrollPane(conversa), gbc, 0, 0);

    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.weightx = 1;
    gbc.weighty = 0;
    gbc.gridwidth = 1;
    addComp(c, new JScrollPane(redigir), gbc, 0, 1);
    
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 0;
    addComp(c, enviar, gbc, 1, 1);

public void addComp(Container cont, Component c, GridBagConstraints gbc, int px, int py) {
	gbc.gridx = px;
	gbc.gridy = py;
	cont.add(c, gbc);
}[/code]

esse ai quase funciona… o problema eh q qdo a textarea de cima chega ao ponto da barra de rolagem mexer, qdo eu do um resize na tela a textarea de baxo simplesmente encolhe…

Cara, como descobri recentemente, Swing sem Forms gera queda de cabelos, unhas roídas e úlcera.

Minha sugestão: desiste do GridBagLayoutFromHell, e baixe este arquivo
http://www.jgoodies.com/download/libraries/forms-1_0_5.zip
e leia este tutorial (se não abrir na primeira, atualize a página)
http://www.jgoodies.com/articles/forms.pdf

[quote=LIPE]Cara, como descobri recentemente, Swing sem Forms gera queda de cabelos, unhas roídas e úlcera.

Minha sugestão: desiste do GridBagLayoutFromHell, e baixe este arquivo
http://www.jgoodies.com/download/libraries/forms-1_0_5.zip
e leia este tutorial (se não abrir na primeira, atualize a página)
http://www.jgoodies.com/articles/forms.pdf
[/quote]

mto boa lipe, esse treco ai realmente eh bom e funciona :D:D

recomendo a todos

lipe… o pior eh q eu refiz o layout com o form… e kra… deu na merma :frowning:

eh o seguinte, eu sinto q a jtextarea de cima esta ignorando a barra de rolangem… toda vez q a janela eh redimensionada ele cresce o sulficiente pra exibir todo o conteudo da jtextarea, ai fica sem barra de rolagem, e os outros componentes somem…

vc sabe com resolve?

Posta o código, por favor.

ta ai:

        CellConstraints cc = new CellConstraints();
        FormLayout layout = new FormLayout("5px, f:p:g, 5px, f:100px, 5px", "5px, f:p:g, 5px, f:60px, 5px");
        JPanel panel = new JPanel(layout);
        
        Container c = getContentPane();
        
        conversa = new JTextArea();
        conversa.setEditable(false);
        conversa.setFocusable(false);
        conversa.setLineWrap(true);
        
        redigir = new JTextArea();

        enviar = new JButton("Enviar");
        
        JScrollPane pc = new JScrollPane(conversa);
        pc.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        pc.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        
        panel.add(pc, cc.xyw(2, 2, 3));
        panel.add(new JScrollPane(redigir), cc.xy(2, 4));
        panel.add(enviar, cc.xy(4, 4));
        
        c.add(panel, "Center");

ajuda ae plzzzzz

Opa.

Aqui os outros componentes não somem como você falou. O objeto ‘conversa’ se redimensiona junto com a janela, ocupando todo o espaço que sobra, mas não sobrepõe a outra textarea nem o botão.

[quote=LIPE]Opa.

Aqui os outros componentes não somem como você falou. O objeto ‘conversa’ se redimensiona junto com a janela, ocupando todo o espaço que sobra, mas não sobrepõe a outra textarea nem o botão.[/quote]

esse eh o problema mermo, ele cresce d+, n eh q ele sobreponha, mas ele ocupa tanto espaco q os outros somem… vc n conseguiu arruma um geito dele n crescer tanto???

Cara, tem um programa legal pra lidar com Forms

https://abeille.dev.java.net/

Espero que ajude

O que quer dizer com “não crescer tanto”? Tamanho absoluto? Aqui não fez os outros sumirem.

Observe:

FormLayout layout = new FormLayout( "5px, f:p:g, 5px, f:100px, 5px",
				"5px, f:p:g, 5px, f:60px, 5px" );

Você declarou que qualquer elemento colocado na linha 2 (a da textarea) deve preencher todo o espaço possível, e os elementos na linha 4 (botão e a outra textarea) devem ter tamanho de 60px.

Eu lembro de ler na documentação que é possível declarar o a constraint “grow” com um double como parâmetro ( grow(0.5) ), mas não me lembro bem como funciona isso, portanto, releia esta parte :smiley:

Olá Wilker,

Bom não sei se é isso que vc deseja, mais acho que pode ajudar alguma coisa.

[code]import java.awt.;
import javax.swing.
;
/*

  • Created on 15/04/2005
  • TODO To change the template for this generated file go to
  • Window - Preferences - Java - Code Style - Code Templates
    */

/**

  • @author Rodrgo Achilles Pereira

  • TODO To change the template for this generated type comment go to

  • Window - Preferences - Java - Code Style - Code Templates
    */
    public class TesteLayout extends JFrame
    {
    private Container cont = new Container();
    private JPanel painelSul, painelBotao, painelText;
    private JButton botaoEnviar;
    private JTextArea Area;
    private JTextField text;
    private JScrollPane barraRolagem;

    public TesteLayout()
    {
    super(“Layuot de um CHAT”);
    cont = getContentPane();

     cont.setLayout(new GridLayout(2, 1));
     painelSul = new JPanel();
     painelSul.setLayout(new GridLayout(1, 2));
     painelBotao = new JPanel();
     painelBotao.setLayout(new FlowLayout(FlowLayout.CENTER));
     painelText = new JPanel();
     painelText.setLayout(new FlowLayout(FlowLayout.CENTER));
     
     Area = new JTextArea(10, 20);
     barraRolagem = new JScrollPane(Area);
     barraRolagem.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
     barraRolagem.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
     text = new JTextField(20);
     botaoEnviar = new JButton("Enviar");
     botaoEnviar.setBorderPainted(false);
     botaoEnviar.setContentAreaFilled(false);
     
     painelBotao.add(botaoEnviar);
     painelText.add(text);
     painelSul.add(painelText);
     painelSul.add(painelBotao);
     cont.add(barraRolagem);
     cont.add(painelSul);
     
     setContentPane(cont);
     pack();
     setVisible(true);
     setSize(490, 300);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    }
    public static void main(String[] args)
    {
    new TesteLayout();
    }
    }[/code]

Tente usar sempre que puder, ou não, o GRIDLAYOUT, FLOWLAYOUT, BORDERLAYOUT, pois vc, em diversos so, ou resoluções, o seu trabalho será visualizado. A menos que vc fixe a janela…

Espero que tenha ajudado e desculpe se fui um pouco intrometido.
Abraçosss

vlw pela dica, mas eu consegui resolver!! (ufa)

bom galera, pra quem tiver com o mesmo problema, a mudanca foi na hora de criar o FormLayout

onde eu colocava f:p:g (fill:preferer:grow) eu agora coloco f:d:g (fill:default:grow)

com isso n aconteceu + o problema :smiley: