Bom dia Pessoal,
Estava fazendo um formulario em swing, testando o GroupLayout que parece ser bem interessante, é meio complicado de entender no principio mais depois parece ser bem recompensador, estava seguindo o seguinte tutorial no site da oracle: [url] http://download.oracle.com/javase/tutorial/uiswing/layout/groupExample.html[/url] depois que entendi o principio do layout, tentei fazer um formulario simples, segue abaixo o codigo:
//package com.agenda.ui;
import javax.swing.*;
import static javax.swing.GroupLayout.Alignment.*;
public class AddContactForm {
JFrame frame;
GroupLayout layout;
JLabel lbNome;
JLabel lbTelefone;
JLabel lbEmail;
JTextField tfNome;
JTextField tfTelefone;
JTextField tfEmail;
public AddContactForm() {
frame = new JFrame("Adicionar Contato");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
layout = new GroupLayout(frame.getContentPane());
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
frame.getContentPane().setLayout(layout);
lbNome = new JLabel("Nome:");
lbTelefone = new JLabel("Telefone:");
lbEmail = new JLabel("Email:");
tfNome = new JTextField();
tfTelefone = new JTextField();
tfEmail = new JTextField();
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(LEADING)
.addComponent(lbNome)
.addComponent(lbTelefone)
.addComponent(lbEmail))
.addGroup(layout.createParallelGroup(LEADING)
.addComponent(tfNome)
.addComponent(tfTelefone)
.addComponent(tfEmail))
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(BASELINE)
.addComponent(lbNome)
.addComponent(tfNome))
.addGroup(layout.createParallelGroup(BASELINE)
.addComponent(lbTelefone)
.addComponent(lbEmail))
.addGroup(layout.createParallelGroup(BASELINE)
.addComponent(lbEmail)
.addComponent(tfEmail))
);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new AddContactForm();
}
}
tudo parece estar em ordem, pois ja revisei varias vezes e nao encontrei erro algum, o codigo compila sem problemas, mais em runtime… tenho esta exception:
Exception in thread "main" java.lang.IllegalStateException: javax.swing.JTextField[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=com.apple.laf.AquaTextFieldBorder@46c837cd,flags=288,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=128,g=128,b=128],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=com.apple.laf.AquaImageFactory$SystemColorProxy[r=0,g=0,b=0],selectionColor=com.apple.laf.AquaImageFactory$SystemColorProxy[r=164,g=203,b=255],columns=0,columnWidth=0,command=,horizontalAlignment=LEADING] is not attached to a vertical group
at javax.swing.GroupLayout.checkComponents(GroupLayout.java:1069)
at javax.swing.GroupLayout.prepare(GroupLayout.java:1019)
at javax.swing.GroupLayout.preferredLayoutSize(GroupLayout.java:857)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1636)
at javax.swing.JRootPane$RootLayout.preferredLayoutSize(JRootPane.java:907)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1636)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:702)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at java.awt.Window.pack(Window.java:706)
at AddContactForm.<init>(AddContactForm.java:62)
at AddContactForm.main(AddContactForm.java:67)
sera que falta algo? no exemplo da oracle eles apenas extenderam JFrame, mais nao acredito que tenha algo a ver, se alguem ja passou pelo mesmo problema e poderia partilhar uma solucao ou dica, ficarei agradecido.