sclass JTitleAndBulletPoints implements Swingable { S title; // HTML new LS bulletPoints; // HTML transient JLabel label; transient JComponent component; visualize { if (component == null) component = setMargin(20, label = jTopLabel()); update(); ret component; } void update { if (label == null) ret; setText(label, jlabel_fixImages(hhtml( p(b(unnull(title), style := "font-size: 40px")) + ul(map html_prependBullet(bulletPoints), style := "list-style-type: none; font-size: 20px", null, /* li styles */ style := "margin-bottom: 10px; text-indent: -20px; padding-left: 20px"))); } void setTitle(S title) { this.title = title; update(); } void setBulletPoints(LS bulletPoints) { this.bulletPoints = bulletPoints; update(); } void addBulletPoint(S s) { this.bulletPoints.add(s); update(); } }