static JComponent tableWithSearcher(final JTable t, O... _) { final new JTextField input; onUpdate(input, new Runnable { L lastFiltered, lastOriginal; public void run() { S pat = trim(input.getText()); L> data = rawTableData(t); if (eq(lastFiltered, data)) data = lastOriginal; print("Searching " + n(l(data), "entry")); new L data2; for (Map map : data) if (anyValueContainsIgnoreCase(map, pat)) data2.add(map); print("Found " + n(l(data2), "entry")); lastFiltered = data2; lastOriginal = data; dataToTable(t, data2); } }); JComponent top = withLabel("Search:", input); ret boolOptPar(_, 'withMargin) ? northAndCenterWithMargin(top, t) : northAndCenter(top, t); }