Below is the source that defines and displays a simple screen. Be aware that a tab in the YAML file will cause the parsing of the YAML file to fail.
src/main/java/person/app/PersonApp.yaml
JFrame(name=frame, title=frame.title, size=packed, defaultCloseOperation=exitOnClose): - JLabel(name=fNameLbl, text=label.firstName) - JLabel(name=lNameLbl, text=label.lastName) - JLabel(name=emailLbl, text=label.email) - JTextField(name=fName) - JTextField(name=lName) - JTextField(name=email) - JButton(name=save, text=button.save, onAction=($validate,save)) - JButton(name=cancel, text=button.cancel, onAction=($confirm,cancel)) - MigLayout: | [pref] [grow,100] [pref] [grow,100] fNameLbl fName lNameLbl lName emailLbl email+* >save+*=1,cancel=1 bind: - fName.text: this.person.firstName - lName.text: this.person.lastName - email.text: this.person.email validate: - fName.text: {mandatory: true, label: label.firstName} - lName.text: {mandatory: true, label: label.lastName} - email.text: {mandatory: true, emailAddress: true, label: label.email}
package person.app; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.UIManager; import org.javabuilders.BuildResult; import org.javabuilders.annotations.DoInBackground; import org.javabuilders.event.BackgroundEvent; import org.javabuilders.event.CancelStatus; import org.javabuilders.swing.SwingJavaBuilder; public class PersonApp extends JFrame { private Person person; private BuildResult result; public PersonApp() { person = new Person(); person.setFirstName("John"); person.setLastName("Smith"); result = SwingJavaBuilder.build(this); } public Person getPerson() { return person; } private void cancel() { setVisible(false); } @DoInBackground(cancelable = true, indeterminateProgress = false, progressStart = 1, progressEnd = 100) private void save(BackgroundEvent evt) { //simulate a long running save to a database for (int i = 0; i < 100; i++) { evt.setProgressValue(i + 1); if (evt.getCancelStatus() != CancelStatus.REQUESTED) { //sleep try { Thread.sleep(100); } catch (InterruptedException e) { } } else { //cancel requested, let's abort evt.setCancelStatus(CancelStatus.COMPLETED); break; } } } /** * @param args */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { //activate internationalization SwingJavaBuilder.getConfig().addResourceBundle("PersonApp.properties"); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); new PersonApp().setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } }
package person.app; public class Person { private String firstName; private String lastName; private String emailAddress; /** * @return the firstName */ public String getFirstName() { return firstName; } /** * @param firstName the firstName to set */ public void setFirstName(String firstName) { this.firstName = firstName; } /** * @return the lastName */ public String getLastName() { return lastName; } /** * @param lastName the lastName to set */ public void setLastName(String lastName) { this.lastName = lastName; } /** * @return the emailAddress */ public String getEmailAddress() { return emailAddress; } /** * @param emailAddress the emailAddress to set */ public void setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; } }
button.save=Save button.cancel=Cancel label.firstName=First Name: label.lastName=Last Name: label.email=Email:
build.xml
<project name="GoogleSwingBuilder" default="run"> <!-- properties --> <property name="src" location="src/main/java"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <property name="lib.dir" value="../../../lib/Googleswingbuilder"/> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar"/> </path> <target name="clean"> <delete dir="${build}"/> <delete dir="${dist}"/> </target> <target name="compile" depends="clean"> <mkdir dir="${build}"/> <javac srcdir="${src}" destdir="${build}" classpathref="classpath"/> <copy todir="${build}"> <fileset dir="${src}" excludes="**/*.java"/> </copy> </target> <target name="jar" depends="compile"> <mkdir dir="${dist}"/> <jar destfile="${dist}/${ant.project.name}.jar" basedir="${build}"/> </target> <target name="run" depends="jar"> <java fork="true" classname="person.app.PersonApp"> <classpath> <path refid="classpath"/> <path location="${dist}/${ant.project.name}.jar"/> </classpath> </java> </target> </project>