Erro com JGoodies LayoutManager [RESOLVIDO]

Então… eu abandonei o BoxLayout e decedi usar o JGoodies que parece que vai atender minhas necessidades… mas estou fazendo o Layout na mão e esse código:

	FormLayout layout = new FormLayout(
				"right:pref, 3dlu, right:pref, right:pref",
				"p, 1dlu, p, 3dlu, p, 1dlu, p, 1dlu, p");
		PanelBuilder builder = new PanelBuilder(layout);
		CellConstraints cc = new CellConstraints();
		
		builder.add(cotacaoNumber, cc.xy(3, 1));
		builder.add(date, cc.xy(4, 1));
		builder.addSeparator("Empresa", cc.xyw(1, 3, 4));
		builder.add(empresaSearch, cc.xywh(1, 5, 1, 3));
		builder.add(empresa1, cc.xyw(3, 5, 2));
		builder.add(empresa2, cc.xyw(3, 7, 2));
		builder.add(empresa3, cc.xyw(3, 9, 2));
		
		JPanel topPanel = builder.getPanel();

Está lançando essa Exception

java.lang.IndexOutOfBoundsException: The grid width must be a positive number.
	at com.jgoodies.forms.layout.CellConstraints.<init>(CellConstraints.java:338)
	at com.jgoodies.forms.layout.CellConstraints.<init>(CellConstraints.java:300)
	at com.jgoodies.forms.layout.CellConstraints.<init>(CellConstraints.java:278)
	at com.jgoodies.forms.builder.AbstractFormBuilder.createLeftAdjustedConstraints(AbstractFormBuilder.java:644)
	at com.jgoodies.forms.builder.PanelBuilder.addSeparator(PanelBuilder.java:569)
	at com.jgoodies.forms.builder.PanelBuilder.addSeparator(PanelBuilder.java:503)
	at br.com.genesis.gui.ConhecimentoGUI.initComponents(ConhecimentoGUI.java:148)
	at br.com.genesis.gui.ConhecimentoGUI.<init>(ConhecimentoGUI.java:65)
	at br.com.genesis.gui.Genesis.<init>(Genesis.java:74)
	at br.com.genesis.gui.Genesis.getInstance(Genesis.java:34)
	at br.com.genesis.gui.GenesisSplash.<init>(GenesisSplash.java:36)
	at br.com.genesis.gui.GenesisSplash.main(GenesisSplash.java:50)

Alguem que usa o JGoodies sabe resolver?

Eu olhei no QuickStart e não vi nada de errado comparando aquele código com o meu.

O que estou fazendo de errado?

Mudei a pergunta inicial

Meio offtopic, e não vai ajudar neste seu problema específico: Se for aprender um novo layout, a não ser que você realmente precise aprender os que vem com o Java, pega um tipo o JGoodies Forms ou o MiG.

Sempre achei os default do Java (tirando o GroupLayout, que apesar de ilegível é um pouco melhor) tão limitados…

Só mudei a pergunta no primeiro post para aproveitar o tópico.

Pode ser impressão minha, mas numa rápida olhada parece que vc está sobrescrevendo alguns componentes. Qual a linha que a exceção indica como origem??

Testa criar todas as linhas/colunas como ‘p’ também… (ok, essa é um chute dos brabos)

Dicas:

  • new PanelBuilder(layout, new FormDebugPanel()); ajuda na hora de debugar :slight_smile:

-.-

Não acredito até agora… acabei de ver

O erro aponta para a linha ConhecimentoGUI:148 e estou mechendo na tela CotacaoGUI até agora.

Esqueci que deixei esse fragmento de código lá:

Tenho que terminar isso depois =/

FormLayout layout = new FormLayout("","");
		PanelBuilder builder = new PanelBuilder(layout);
		builder.addSeparator("Cliente");
		builder.add(remetente);
		builder.add(destinatario);

O Stack não aparece no eclipse por que eu coloquei um sistema para todos os erros ficarem em um log assim se o cliente reclamar de algo é mais fáçil ir lá e ver se deu algum erro do que procurar.

Por isso não pude clicar e não percebi que era de outro arquivo.

Consegui rodar e não ficou bem legal… mas vou continuar vendo essas constantes.

Começei a me dar bem com esse cara…

mas… para sair algo legal misturei varios LayoutManagers

getContentPane().setLayout(
				new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));

		FormLayout layout = new FormLayout(
				"right:pref, 3dlu, right:pref, 10dlu, right:100dlu",
				"pref, 1dlu, pref, 3dlu, 20, 1dlu, 20, 1dlu, 20");
		CellConstraints cc = new CellConstraints();

		PanelBuilder builder = new PanelBuilder(layout);

		builder.add(cotacaoNumber, cc.xy(3, 1));
		builder.add(date, cc.xy(5, 1));
		builder.addSeparator("Empresa", cc.xyw(1, 3, 5));
		builder.add(empresaSearch, cc.xywh(1, 5, 1, 3));
		builder.add(empresa1, cc.xyw(3, 5, 3));
		builder.add(empresa2, cc.xyw(3, 7, 3));
		builder.add(empresa3, cc.xyw(3, 9, 3));

		JPanel headerPanel = builder.getPanel();

		FormLayout layout2 = new FormLayout(
				"60dlu, 40dlu, 70dlu, 10dlu, 40dlu, 40dlu, 40dlu",
				"p, p");
		PanelBuilder builder2 = new PanelBuilder(layout2);
		builder2.addSeparator("Destino", cc.xyw(1, 1, 7));
		builder2.add(destino, cc.xy(1, 2));
		builder2.add(prazoEntrega, cc.xy(2, 2));
		builder2.add(pracaSearch, cc.xy(3, 2));
		builder2.add(fretePeso, cc.xy(5, 2));
		builder2.add(freteValor, cc.xy(6, 2));
		builder2.add(pedagio, cc.xy(7, 2));

		JPanel destinoPanel = builder2.getPanel();

		JPanel cifFob = new JPanel();
		cifFob.add(cif);
		cifFob.add(fob);

		FormLayout layout3 = new FormLayout("p,5,p,5,p,10,p",
				"p,5,p,p,p,5dlu,p,p,p");
		PanelBuilder builder3 = new PanelBuilder(layout3);
		builder3.addSeparator("Info. N.F.", cc.xyw(1, 1, 7));
		builder3.add(peso, cc.xy(1, 3));
		builder3.add(valorNF, cc.xy(3, 3));
		builder3.add(cifFob, cc.xy(5, 3));
		builder3.addSeparator("Info. Cot.", cc.xyw(1, 4, 7));
		builder3.add(taxa, cc.xy(1, 5));
		builder3.add(outros, cc.xy(3, 5));
		builder3.add(freteFechado, cc.xy(5, 5));
		builder3.add(prazoPgmt, cc.xy(7, 5));
		builder3.addSeparator("", cc.xyw(1, 7, 7));
		builder3.add(calcButton, cc.xy(1, 8));
		builder3.add(totalFrete, cc.xy(3, 8));
		builder3.add(totalFreteIsms, cc.xy(5, 8));
		builder3.addSeparator("", cc.xyw(1, 9, 7));
		
		JPanel buttonPane = new JPanel();
		buttonPane.setLayout(new GridLayout(3, 1));
		buttonPane.add(atualizar);
		buttonPane.add(novo);
		buttonPane.add(doneButton);
		
		JPanel bottomPane = new JPanel(new FlowLayout());
		bottomPane.add(builder3.getPanel());
		bottomPane.add(buttonPane);

		getContentPane().add(headerPanel);
		getContentPane().add(medidasPanel);
		getContentPane().add(destinoPanel);
		getContentPane().add(bottomPane);

Está certo essa mistura mesmo?

[quote=Mark_Ameba]Começei a me dar bem com esse cara…

mas… para sair algo legal misturei varios LayoutManagers

Está certo essa mistura mesmo?[/quote]

Num mesmo componente não. Mas nada impede que você divida sua interface em vários JPanels menores, pra ter um melhor controle do posicionamento… só precisa tomar cuidado por causa das bordas, alinhamentos e ação dos componentes.

Eu costumo dividir em várias classes mesmo, por exemplo essa classe e o resto do pacote.

Então… eu faço isso mesmo. Varios JPanels em um Container principal…

O unico problema é que está naquele código “Megazord”.