public ObjectTableSorter(ObjectTableModel model) { this.model = model; this.valueComparators = new Comparator<?>[this.model.getColumnCount()]; for (int i = 0; i < valueComparators.length; i++) { this.setValueComparator(i, null); } setFallbackComparator(null); }
/** * Assign comparator to given column, if <code>null</code> a getDefaultComparator(int) default one is used instead. * @param column Model column index. * @param comparator Column value comparator. * @return <code>this</code> */ public ObjectTableSorter setValueComparator(int column, Comparator<?> comparator) { invalidate(); valueComparators[column] = ObjectUtils.defaultIfNull(comparator, getDefaultComparator(column)); return this; }
@Override public int getViewRowCount() { return getModelRowCount(); }
/** * Sort table */ protected void sort() { if (comparator == null) { comparator = Stream.concat( Stream.concat( getPrimaryComparator() != null ? Stream.of(getPrimaryComparator()) : Stream.<Comparator<Row>>empty(), getSortKeys().stream().filter(sk -> sk != null && sk.getSortOrder() != SortOrder.UNSORTED).map(this::getComparatorFromSortKey) ), Stream.of(getFallbackComparator()) ).reduce(comparator, (result, current) -> result != null ? result.thenComparing(current) : current); } viewToModel.clear(); int rowCount = model.getRowCount(); viewToModel.ensureCapacity(rowCount); for (int i = 0; i < rowCount; i++) { viewToModel.add(new Row(i)); } Collections.sort(viewToModel, comparator); updateModelToView(); }
/** * Main visualizer setup. */ private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final) this.setLayout(new BorderLayout()); // MAIN PANEL JPanel mainPanel = new JPanel(); Border margin = new EmptyBorder(10, 10, 5, 10); mainPanel.setBorder(margin); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); mainPanel.add(makeTitlePanel()); myJTable = new JTable(model); myJTable.setRowSorter(new ObjectTableSorter(model).fixLastRow()); JMeterUtils.applyHiDPI(myJTable); HeaderAsPropertyRendererWrapper.setupDefaultRenderer(myJTable); myJTable.setPreferredScrollableViewportSize(new Dimension(500, 70)); RendererUtils.applyRenderers(myJTable, RENDERERS); myScrollPane = new JScrollPane(myJTable); this.add(mainPanel, BorderLayout.NORTH); this.add(myScrollPane, BorderLayout.CENTER); saveTable.addActionListener(this); JPanel opts = new JPanel(); opts.add(useGroupName, BorderLayout.WEST); opts.add(saveTable, BorderLayout.CENTER); opts.add(saveHeaders, BorderLayout.EAST); this.add(opts,BorderLayout.SOUTH); }
table.setRowSorter(new ObjectTableSorter(model).setValueComparator(5, Comparator.nullsFirst( (ImageIcon o1, ImageIcon o2) -> {
protected boolean isSortable(int column) { return getValueComparator(column) != null; }
public Object getValue() { return getModel().getObjectListAsList().get(getIndex()); }
myJTable.setRowSorter(new ObjectTableSorter(model).fixLastRow()); JMeterUtils.applyHiDPI(myJTable); HeaderAsPropertyRendererWrapper.setupDefaultRenderer(myJTable, StatGraphVisualizer.getColumnsMsgParameters());
@SuppressWarnings({ "rawtypes", "unchecked" }) protected Comparator<Row> getComparatorFromSortKey(SortKey sortkey) { Comparator comp = getValueComparator(sortkey.getColumn()); if (sortkey.getSortOrder() == SortOrder.DESCENDING) { comp = comp.reversed(); } Function<Row,Object> getValueAt = (Row row) -> row.getValueAt(sortkey.getColumn()); return Comparator.comparing(getValueAt, comp); }
public Object getValueAt(int column) { return getModel().getValueAt(getIndex(), column); } }
myJTable.setRowSorter(new ObjectTableSorter(model).fixLastRow()); JMeterUtils.applyHiDPI(myJTable);