static int makeNiceButtons_maxImageSize = 128; // params = text, image, action, text, image, action, ... // or TextImageAction... // or a list of above stuff static DynamicHStack makeNiceButtons(O... params) { DynamicHStack stack = (DynamicHStack) dynamicHStack().spacing(20); params = flattenArray2(params); for (int i = 0; i < l(params); ) { TextImageAction tia = null; if (params[i] instanceof TextImageAction) { tia = (TextImageAction) params[i]; i++; } else { tia = TextImageAction( str(get(params, i)), str(get(params, i+1)), get(params, i+2)); i += 3; } fO _tia = tia; O action = tia.action; if (action == null) action = r { appendToMechQ_withDate("User actions", "User clicked on actionless button " + sfu(_tia)); }; JButton b = jImageAndTextButton(tia.imageID, tia.text, action); if (nempty(tia.toolTip)) setToolTip(b, tia.toolTip); resizeImageButtonToMax(b, makeNiceButtons_maxImageSize); setVerticalTextPosition(JButton.TOP, setFontSize(15, makeBold(b))); setVerticalAlignment(JButton.TOP, b); setMargin(10, b); stack.addComponent(b); } ret stack; }