JPanel com GridLayout

5 respostas
P

olá gostaria de uma ajudinha…

quando crio um JPanel com o layout de GridLayout, defino o numeros de linhas e colunas: exemplo de 3x3

se quero adicionar um botao ou caixa de texto neste JPanel porem no centro seria na linha 2 coluna 2, contando da esquerda para direita e de cima pra baixo é a 5ª posicao.

estou tentando fazer este exemplo mas nao consigo, da erro e a excecao de ILlegalArgumentException dizendo que a posicao do indice está incorreta, tentei varios numeros de indice diferente mas nao funciona, e no metodo: JPanel.add(Component comp, int index). no caso do index da esse erro.

alguem saberia como centralizar o componente ou definir em qual posicao do Grid vai ficar?

5 Respostas

T

Eu aconselho você adicionar nessa posição um outro painel e os componentes dentro deste novo painel.

falow

P

o meu problema é como adicionar em tal posicao apenas colocando o numero nao vai, vou mostrar como estou tentando fazer:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Painel{
	
	JFrame janela = new JFrame();	
	
	JPanel painelPrinc = new JPanel();
	JPanel painelSpr = new JPanel();
		
	JTextField txt = new JTextField(5);

                public Painel(){
		
		janela.setTitle("Painel");
		janela.setSize(300,300);
		janela.setLocation(500,250);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		painelPrinc.setLayout(new BorderLayout());
		
		painelPrinc.add("North", painelSpr);
		painelPrinc.add("West", (outroPainel));
		painelPrinc.add("Center", (outroPainel));
		painelPrinc.add("East", (outroPainel));
		painelPrinc.add("South", (outroPainel));

		painelSpr.setLayout(new GridLayout(3, 3, 5, 5));	
		
		painelSpr.add(txt, 5);	

                                janela.setVisible(true);    
	
	}
	
	public static void main(String[] args) {
		new Painel();
	}

}

aí neste caso o painel superior que chamei de painelSpr ele tem 9 posicoes, pq esta como 3x3 no Grid, mas quando executo da erro e aparece a excecao de que o indice da posicao esta incorreto e se alterar a linha

painelSpr.add(txt, 5);

para

painelSpr.add(txt);

ele ira funcionar normalmente porem o txt aparece no topo da janela queria centralizar o txt no North do Border.

dividi o North do Border num Grid de 3x3 e queria centralizar o Component neste Grid...

como faco isso?

alguem poderia ajudar?

T

Você vai adicionando na sequência, ou seja, da esquerda para direita e de cima para baixo, vai adicionando os componentes e quando for na posição 2x2, ou seja o 5º componente, vc adiciona o painel.

E

GridLayout não tem suporte a constraints. Este índice que está passando junto com o componente “txt” está dizendo para o container que este deve ser o quinto componente, como há menos de 5 componentes no container, a exceção é lançada.

Aconselho que use o MigLayout para fazer isto.

P

disse eu ate faria mas teria que instanciar varias labels em branco pra ir adicionando?

pq no north quero deixar apenas o txt e no meio, criei 4 labels pra fazer este teste e todas com rotulo " "; em branco

aí adicionei 4 labels, depois o txt pra poder deixar no centro… mas ai fico criando label a toa… nao tem como centralizar direto?

Criado 27 de abril de 2011
Ultima resposta 27 de abr. de 2011
Respostas 5
Participantes 3