!7 p-noconsole { final JTextField tfSender = jtextfield(completeGMailAddress(gmailDefaultUser())); final JTextField tfTo = jtextfield("bill.gates@microsoft.com"); final JTextField tfSubject = jtextfield("Hello"); final JTextArea tfText = jwrappedtextarea(trim([[ Hello Bill. -Sent from my JavaX computer]])); F1 layouter = func(Container parent) -> Dimension { L l = getComponents(parent); new BitSet bigOnes; for i over l: if (containsATextArea(l.get(i))) add(bigOnes, i); int nBigOnes = bigOnes.cardinality(); int mandatoryHeight = totalPreferredHeight(listWithoutIndicesInBitSet(l)); Dimension size = parent.getSize(); int liberalSpace = size.height-mandatoryHeight; double perBigOne = doubleRatio(liberalSpace, nBigOnes); double y = 10; for i over l: { Component c = l.get(i); bool big = contains(bigOnes, i); double h = big ? perBigOne : c.getPreferredSize().height; int actualY = iround(y); c.setBounds(10, actualY, size.width-20, iround(y+h)-actualY); y += h; } ret componentsBoundingSize(parent, 10); }; final JComponent c = showFormTitled_customLayout(layouter, "GMail Send Form", "From:", tfSender, "To:", tfTo, "Subject:", tfSubject, "Text:", jminheight(300, tfText), "", jbutton("Send mail!", r-thread-messagebox { infoBox("Sending..."); quickGMail(getTextTrim(tfSender), getTextTrim(tfTo), getTextTrim(tfSubject), getText(tfText)); infoBox("Sent!"); })); // TODO: keep data titlePopupMenuItem(c, "Bigger fonts", r { swingBiggerFonts(); disposeWindow(c); callMain(); }); titlePopupMenuItem(c, "Smaller fonts", r { swingSmallerFonts(); disposeWindow(c); callMain(); }); }