19package org.sleuthkit.autopsy.datasourcesummary.uiutils;
21import java.awt.BorderLayout;
22import java.awt.Graphics;
23import java.awt.event.MouseAdapter;
24import java.awt.event.MouseEvent;
25import java.util.Collections;
27import java.util.function.Function;
28import java.util.stream.Collectors;
29import javax.swing.JComponent;
30import javax.swing.JLayer;
31import javax.swing.JScrollPane;
32import javax.swing.JTable;
33import javax.swing.plaf.LayerUI;
34import javax.swing.table.DefaultTableColumnModel;
35import javax.swing.table.TableColumn;
36import javax.swing.table.TableColumnModel;
52 private final MouseEvent
e;
54 private final int row;
55 private final int col;
130 private static class Overlay extends LayerUI<JComponent> {
141 void setVisible(
boolean visible) {
155 public void paint(Graphics g, JComponent c) {
173 TableColumnModel
tableModel =
new DefaultTableColumnModel();
175 for (
int i = 0; i < columns.size(); i++) {
176 TableColumn col =
new TableColumn(i);
181 col.setPreferredWidth(model.
getWidth());
205 List<Function<T, ? extends Object>> columnRenderers = columns.stream()
206 .map((colModel) -> colModel.getCellRenderer())
207 .collect(Collectors.toList());
234 private Function<T, ? extends Object>
keyFunction = (rowItem) -> rowItem;
252 this.table.addMouseListener(
new MouseAdapter() {
255 public void mouseClicked(MouseEvent e) {
258 int row =
table.rowAtPoint(e.getPoint());
259 int col =
table.columnAtPoint(e.getPoint());
264 && col >= 0 && col <
tableModel.getColumnCount()) {
266 Object cellValue =
tableModel.getValueAt(row, col);
272 table.setGridColor(javax.swing.UIManager.getDefaults().getColor(
"InternalFrame.borderColor"));
285 throw new IllegalArgumentException(
"Null table model passed to setModel");
318 return this.table.getColumnModel();
329 this.table.setColumnModel(columnModel);
352 throw new IllegalArgumentException(
"Key function must be non-null");
365 int selectedRow = this.table.getSelectedRow();
366 int count = this.table.getSelectedRowCount();
367 if (selectedRow < 0 || this.tableModel == null || selectedRow + count > this.tableModel.
getDataRows().size()) {
370 return this.tableModel.
getDataRows().subList(selectedRow, selectedRow + count);
377 int prevSelectedRow = this.table.getSelectedRow();
379 T prevValue = (tableRows !=
null && prevSelectedRow >= 0 && prevSelectedRow < tableRows.size())
380 ? this.tableModel.
getDataRows().get(prevSelectedRow)
383 Object prevKeyValue = (prevValue ==
null) ?
null : this.keyFunction.apply(prevValue);
387 List<T> dataToSet = (data ==
null) ? Collections.emptyList() : data;
393 if (prevKeyValue !=
null) {
394 for (
int objIndex = 0; objIndex < dataToSet.size(); objIndex++) {
395 Object thisKey = this.keyFunction.apply(dataToSet.get(objIndex));
396 if (prevKeyValue.equals(thisKey)) {
397 this.table.setRowSelectionInterval(objIndex, objIndex);
407 this.overlayLayer.setVisible(visible);
408 this.overlayLayer.setMessage(message);
415 table =
new JTable();
416 table.getTableHeader().setReorderingAllowed(
false);
420 setLayout(
new BorderLayout());
421 add(dualLayer, BorderLayout.CENTER);
void setMessage(String message)
static CellMouseListener getMouseListener()
MouseEvent getMouseEvent()
CellMouseEvent(MouseEvent e, JTable table, int row, int col, Object cellValue)
final BaseMessageOverlay overlayDelegate
static final long serialVersionUID
void paint(Graphics g, JComponent c)
Function< T, ? extends Object > keyFunction
synchronized void setResults(List< T > data)
static final int EXTRA_ROW_HEIGHT
CellMouseListener cellListener
JTablePanel< T > setColumnModel(TableColumnModel columnModel)
static< T, C extends GuiCellModel > JTablePanel< T > getJTablePanel(List< ColumnModel< T, C > > columns)
JTablePanel< T > setCellListener(CellMouseListener cellListener)
JTablePanel< T > setKeyFunction(Function< T, ? extends Object > keyFunction)
static final long serialVersionUID
static< T, C extends GuiCellModel > ListTableModel< T > getTableModel(List< ColumnModel< T, C > > columns)
static< T, C extends GuiCellModel > TableColumnModel getTableColumnModel(List< ColumnModel< T, C > > columns)
void setMessage(boolean visible, String message)
TableColumnModel getColumnModel()
ListTableModel< T > tableModel
List< T > getSelectedItems()
JTablePanel(ListTableModel< T > tableModel)
JScrollPane tableScrollPane
CellMouseListener getCellListener()
Function< T, ? extends Object > getKeyFunction()
final JTablePanel< T > setModel(ListTableModel< T > tableModel)
static final CellModelTableCellRenderer DEFAULT_CELL_RENDERER
void mouseClicked(CellMouseEvent e)
void setDataRows(List< T > dataRows)