public class FTableAtm extends javax.swing.table.AbstractTableModel implements FTableAtmI, de.ipcon.swing.ColumnInfoProviderI, DBManEventListenerI, BOCacheListenerI, TransactionListenerI, de.ipcon.swing.AnnotatedValueTableModelI, de.ipcon.swing.SortingAwareTableModelI
Modifier and Type | Field and Description |
---|---|
static org.apache.log4j.Logger |
log |
Constructor and Description |
---|
FTableAtm() |
Modifier and Type | Method and Description |
---|---|
void |
addLoadingStatusListener(LoadingStatusListenerI l)
Adds a
LoadingStatusListenerI to this table model. |
void |
addPopupElementListener(PopupElementListenerI l) |
void |
cachedBOsChanged(BO[] items) |
void |
cancel()
Cancels any ongoing data refresh operation.
|
void |
cancel(boolean wait)
Cancels any ongoing data refresh operation, optionally waiting for its completion.
|
void |
checkPoint()
Callback after a transaction has been arrived at a checkpoint, e.g. after being committed or has no
uncommitted changes anymore.
|
void |
close()
Closes and cleans up resources associated with this table model.
|
void |
configure(FTableConfigurationI _conf) |
boolean |
displaysDependentRelation()
Checks if this table model is configured to display a dependent relation.
|
boolean |
displaysManyRelation()
Checks if this table model is configured to display a many-relation (e.g., one-to-many or many-to-many).
|
boolean |
displaysRelation()
Checks if this table model is configured to display a relation.
|
boolean |
displaysVirtualRelation()
Checks if this table model is configured to display a virtual relation.
|
static void |
executeAndCompleteRunner(java.lang.Runnable r,
java.util.concurrent.CompletableFuture<java.lang.Void> f)
Executes a given
Runnable and then completes a CompletableFuture . |
void |
fireReadyLoading()
Notifies all registered
LoadingStatusListenerI s that the model has finished loading and is ready. |
void |
fireTableCellUpdated(int row,
int column)
Notifies all listeners that the cell at the specified row and column has been updated.
|
void |
fireTableDataChanged()
Notifies all listeners that all table data has changed.
|
void |
fireTableRowsDeleted(int firstRow,
int lastRow)
Notifies all listeners that rows in the specified range have been deleted.
|
void |
fireTableRowsInserted(int firstRow,
int lastRow)
Notifies all listeners that rows in the specified range have been inserted.
|
void |
fireTableRowsUpdated(int[] updatedRows)
Notifies all listeners that a set of non-contiguous rows have been updated.
|
void |
fireTableRowsUpdated(int firstRow,
int lastRow)
Notifies all listeners that rows in the specified range have been updated.
|
AnnotatedValue |
getAnnotatedValueAt(int row,
int col)
Overwritten method
getAnnotatedValueAt() from interface AnnotatedValueTableModelI . |
AnnotatedValue |
getAnnotatedValueAt(int rowIx,
int colIx,
java.lang.Object nullValue)
Retrieves the
AnnotatedValue at the specified row and column, with options for
null handling, visibility, and synchronous retrieval. |
AnnotatedValue |
getAnnotatedValueAt(int rowIx,
int colIx,
java.lang.Object nullValue,
boolean ignoreVisibility) |
AnnotatedValue |
getAnnotatedValueAt(int rowIx,
int colIx,
java.lang.Object nullValue,
boolean ignoreVisibility,
boolean forceSync) |
java.lang.Class |
getColumnClass(int aCol) |
int |
getColumnCount() |
java.lang.String |
getColumnDescription(int aCol) |
boolean |
getColumnIsSlow(int _idx) |
boolean |
getColumnIsSortable(int _idx) |
java.lang.String |
getColumnName(int aCol) |
java.util.concurrent.Future<AnnotatedValue> |
getFutureAnnotatedValueForExport(int rowIx,
int colIx)
Overwritten method
getFutureAnnotatedValueForExport() from interface AnnotatedValueTableModelI . |
java.lang.Object |
getObjectForRow(int row)
Retrieves the Business Object (BO) associated with the specified row index in the table model.
|
java.lang.Object |
getObjectWithId(java.lang.Long id)
Returns the Business Object (BO) that has the specified ID.
|
int |
getRowCount() |
int |
getRowForObject(java.lang.Object o)
Returns the model row index for a given Business Object (BO).
|
BO[] |
getRowObjects()
Returns a defensive copy of the internal array of all Business Objects (BOs)
currently in the table model.
|
java.lang.Object |
getValueAt(int row,
int col)
Overwritten method
getValueAt() from interface TableModel . |
java.lang.Object |
getValueAt(int row,
int col,
java.lang.Object nullValue)
Retrieves the raw value at the specified row and column, with options for null handling and visibility.
|
java.lang.Object |
getValueAt(int row,
int col,
java.lang.Object nullValue,
boolean ignoreVisibility) |
java.lang.Object |
getValueForSortingAt(int row,
int col)
Overwritten method
getValueForSortingAt() from interface SortingAwareTableModelI . |
void |
invokeAfterRefreshCompletion(java.lang.Runnable r)
Invokes a
Runnable after the current data refresh operation has completed. |
boolean |
isCellEditable(int aRow,
int aCol)
Checks if the cell at the specified row and column is editable.
|
boolean |
isDataIncomplete()
Checks if the data currently loaded in the table model is incomplete.
|
boolean |
isEditing() |
boolean |
isLoading() |
boolean |
isUnfetched() |
void |
newProcs(BOProc[] boprocs)
Callback for newly created procs or changes to BOs known in the transaction.
|
void |
popupElementValueAdded(java.lang.Object o) |
void |
popupElementValueRemoved(java.lang.Object o) |
void |
popupElementValueSet(java.lang.Object o,
java.lang.Object n) |
void |
processDBManEvent(DBManEvent ev)
Invoked when a subscribed DBManEvent occurs.
|
void |
queueCellUpdate(int row,
int col)
Queues a request to update a specific cell, consolidating multiple updates
and dispatching them efficiently on the Event Dispatch Thread (EDT).
|
void |
refresh()
Refreshes the data in the table model.
|
void |
removeElements(BO[] deletedBOs)
Immediately removes a list of Business Objects (BOs) from the table model.
|
void |
removeLoadingStatusListener(LoadingStatusListenerI l)
Removes a
LoadingStatusListenerI from this table model. |
void |
removePopupElementListener(PopupElementListenerI l) |
void |
removeSurplus(java.util.Set<java.lang.Long> surplus)
Removes surplus Business Objects (BOs) from the table model.
|
void |
setValueAt(java.lang.Object value,
int row,
int col)
Overwritten method
setValueAt() from interface TableModel . |
void |
setValueAt(java.lang.Object value,
int row,
int col,
boolean fireCellUpdate)
Sets the value at the specified cell, handling special logic for relation editing.
|
void |
startEditing() |
void |
stopEditing() |
java.lang.String |
toString() |
void |
triggerRefresh()
Triggers a refresh operation for the table's data.
|
void |
triggerRefresh(java.lang.Boolean editModeSwitch) |
void |
triggerRefresh(java.lang.Boolean editModeSwitch,
boolean afterSave) |
void |
triggerRefresh(java.lang.Boolean editModeSwitch,
boolean afterSave,
java.lang.Runnable onCompletion) |
addTableModelListener, findColumn, fireTableChanged, fireTableStructureChanged, getListeners, getTableModelListeners, removeTableModelListener
public boolean isDataIncomplete()
FTableAtmI
This might indicate that not all data has been fetched yet, or that there are pending operations that would complete the dataset.
isDataIncomplete
in interface FTableAtmI
true
if the data is incomplete, false
otherwise.public boolean isLoading()
isLoading
in interface de.ipcon.swing.SortingAwareTableModelI
public boolean isUnfetched()
isUnfetched
in interface de.ipcon.swing.SortingAwareTableModelI
public java.lang.String toString()
toString
in class java.lang.Object
public void close()
This method initiates the shutdown process for the table model. It sets a "closed" flag to prevent further operations and schedules asynchronous cleanup tasks on and off the Event Dispatch Thread (EDT) to ensure proper resource release.
public void configure(FTableConfigurationI _conf)
public void processDBManEvent(DBManEvent ev)
DBManEventListenerI
DBManBOChangeEvent
for events triggered after modification on BOs.processDBManEvent
in interface DBManEventListenerI
public void newProcs(BOProc[] boprocs)
TransactionListenerI
newProcs
in interface TransactionListenerI
public void removeSurplus(java.util.Set<java.lang.Long> surplus)
This method removes specified BOs from the "relationMap".
If the table is in an "editing" state, it fires update events for rows corresponding to the surplus BOs but does not physically remove them from the "rows" array immediately. Otherwise, it physically removes the surplus BOs from the "rows" array and fires appropriate table model events.
surplus
- A Set
of IDs (Long) of the BOs that are considered surplus
and should be removed from the model.public void checkPoint()
TransactionListenerI
checkPoint
in interface TransactionListenerI
public void cachedBOsChanged(BO[] items)
cachedBOsChanged
in interface BOCacheListenerI
public void startEditing()
public void stopEditing()
public boolean isEditing()
public boolean isCellEditable(int aRow, int aCol)
This method overrides AbstractTableModel.isCellEditable(int, int)
.
A cell is considered editable only if the table is currently in "editing" mode
(as indicated by the "editing" flag) AND the column is the first column (index 0).
This typically allows editing of the "is in relation" checkbox when the table is
editable.
isCellEditable
in interface javax.swing.table.TableModel
isCellEditable
in class javax.swing.table.AbstractTableModel
aRow
- The row index of the cell.aCol
- The column index of the cell.true
if the cell is editable, false
otherwise.public java.lang.String getColumnName(int aCol)
getColumnName
in interface javax.swing.table.TableModel
getColumnName
in class javax.swing.table.AbstractTableModel
public java.lang.String getColumnDescription(int aCol)
getColumnDescription
in interface de.ipcon.swing.ColumnInfoProviderI
public boolean getColumnIsSortable(int _idx)
getColumnIsSortable
in interface de.ipcon.swing.ColumnInfoProviderI
public boolean getColumnIsSlow(int _idx)
public java.lang.Class getColumnClass(int aCol)
getColumnClass
in interface javax.swing.table.TableModel
getColumnClass
in class javax.swing.table.AbstractTableModel
public int getColumnCount()
getColumnCount
in interface javax.swing.table.TableModel
public int getRowCount()
getRowCount
in interface javax.swing.table.TableModel
public java.lang.Object getValueAt(int row, int col)
getValueAt()
from interface TableModel
.
This method retrieves the raw value at the specified row and column.
It delegates to the more comprehensive getValueAt(int, int, Object, boolean)
with default parameters (null for "nullValue" and false for "ignoreVisibility").
getValueAt
in interface javax.swing.table.TableModel
row
- The row index (view coordinate).col
- The column index (view coordinate).Object
value at the specified cell.public java.lang.Object getValueAt(int row, int col, java.lang.Object nullValue)
This method is a convenience wrapper that retrieves the AnnotatedValue
for the cell and then extracts its raw value using AnnotatedValue.get()
.
The goal of the underlying value retrieval mechanism, particularly for potentially "expensive" calls (e.g., network requests for data), is to:
row
- The row index (view coordinate).col
- The column index (view coordinate).nullValue
- An Object
to return if the actual value is null.ignoreVisibility
- If true
, visibility checks are bypassed during value retrieval.Object
value at the specified cell.public java.lang.Object getValueAt(int row, int col, java.lang.Object nullValue, boolean ignoreVisibility)
public java.lang.Object getValueForSortingAt(int row, int col)
getValueForSortingAt()
from interface SortingAwareTableModelI
.
This method retrieves the value to be used for sorting at the specified row and column.
It delegates to the comprehensive getAnnotatedValueAt(int, int, Object, boolean, boolean)
method, forcing synchronous retrieval and ignoring visibility, as sorting typically requires
all values to be present for accurate comparison.
getValueForSortingAt
in interface de.ipcon.swing.SortingAwareTableModelI
row
- The row index (view coordinate).col
- The column index (view coordinate).Object
value for sorting at the specified cell.public AnnotatedValue getAnnotatedValueAt(int row, int col)
getAnnotatedValueAt()
from interface AnnotatedValueTableModelI
.
This method retrieves the AnnotatedValue
at the specified row and column.
It delegates to the more comprehensive getAnnotatedValueAt(int, int, Object, boolean, boolean)
method with default parameters (null for "nullValue", false for "ignoreVisibility", and false for "forceSync").
getAnnotatedValueAt
in interface de.ipcon.swing.AnnotatedValueTableModelI
row
- The row index (view coordinate).col
- The column index (view coordinate).AnnotatedValue
object containing the cell's data and its annotations.public AnnotatedValue getAnnotatedValueAt(int rowIx, int colIx, java.lang.Object nullValue)
AnnotatedValue
at the specified row and column, with options for
null handling, visibility, and synchronous retrieval.
This is the central method for fetching annotated values. It handles special logic for the first column when the table is in "editing" mode (representing a boolean "is-in-relation" check). It then delegates to the configured column's "getAnnotatedValue" method.
rowIx
- The row index (view coordinate).colIx
- The column index (view coordinate).nullValue
- An Object
to return as the value if the actual value is null.ignoreVisibility
- If true
, visibility checks are bypassed during value retrieval.forceSync
- If true
, forces synchronous retrieval of the value, potentially blocking.AnnotatedValue
at the specified cell.
Returns AnnotatedValue.NONE
if the row index is out of bounds or if the associated Business Object (BO) is null.java.lang.IllegalStateException
- If an internal error occurs (e.g. a row's BO is null).public AnnotatedValue getAnnotatedValueAt(int rowIx, int colIx, java.lang.Object nullValue, boolean ignoreVisibility)
public AnnotatedValue getAnnotatedValueAt(int rowIx, int colIx, java.lang.Object nullValue, boolean ignoreVisibility, boolean forceSync)
public java.util.concurrent.Future<AnnotatedValue> getFutureAnnotatedValueForExport(int rowIx, int colIx)
getFutureAnnotatedValueForExport()
from interface AnnotatedValueTableModelI
.
This method retrieves a Future
that will eventually provide the AnnotatedValue
for export purposes. It handles special logic for the first column when the table is in
"editing" mode (representing a boolean "is-in-relation" check) by returning a completed Future
immediately for these calculated values.
For other columns, it delegates the future retrieval to the configured column's "getFutureAnnotatedValueForExport" method.
getFutureAnnotatedValueForExport
in interface de.ipcon.swing.AnnotatedValueTableModelI
rowIx
- The row index (view coordinate).colIx
- The column index (view coordinate).Future
that will eventually return the AnnotatedValue
for export,
or null
if the row index is out of bounds, the associated BO is null, or the column configuration is null.java.lang.IllegalStateException
- If an internal error occurs (e.g. a row's BO is null).public void setValueAt(java.lang.Object value, int row, int col)
setValueAt()
from interface TableModel
.
This method sets the value at the specified cell. It delegates to the more comprehensive
setValueAt(Object, int, int, boolean)
method, ensuring that a cell update event
is fired by default.
setValueAt
in interface javax.swing.table.TableModel
setValueAt
in class javax.swing.table.AbstractTableModel
value
- The new value (an Object
) to set.row
- The row index (view coordinate) of the cell.col
- The column index (view coordinate) of the cell.public void setValueAt(java.lang.Object value, int row, int col, boolean fireCellUpdate)
This method is designed to specifically handle updates to the first column (index 0)
when the table is in "editing" mode, where the cell value is expected to be a Boolean
indicating whether a Business Object (BO) should be added to or removed from a relation.
If the conditions (editing mode, column 0, boolean value) are not met, the method returns
without taking action.
The method distinguishes between "many-relation" and "to-one relation" types for adding/removing or setting/setting null the related BOs. It uses "beforeSetValue" and "afterSetValue" callbacks from the configuration and triggers popup-related events.
value
- The new value (a Boolean
) to set.row
- The row index (view coordinate) of the cell.col
- The column index (view coordinate) of the cell.fireCellUpdate
- If true
, a fireTableCellUpdated
event is dispatched
after the value is set.java.lang.IllegalStateException
- If the parent BO or attribute is null during relation editing.java.lang.RuntimeException
- If any other unexpected error occurs during value setting,
the error is logged and an error dialog is shown to the user.public void removeElements(BO[] deletedBOs)
This method is an internal utility, primarily used in scenarios like "action_delete" to immediately and synchronously remove BOs from the internal data structure and then fire the corresponding "TableModelEvent"s on the Event Dispatch Thread (EDT). It bypasses the standard "TableModelListener" event-driven update flow for performance and immediate visual feedback.
The method uses an IdentityHashMap
for efficient lookup of BOs to be
deleted and rebuilds the internal "rows" array. It then fires "fireTableRowsDeleted"
events in reverse order to ensure correct index handling by the table view.
deletedBOs
- An array of BO
objects to be removed from the table model.public java.lang.Object getObjectForRow(int row)
This method is part of the FTableAtmI
interface, providing an object-oriented
view of the table's data. It directly returns the BO stored at the given index in the
internal "rows" array.
getObjectForRow
in interface FTableAtmI
row
- The row index (model coordinate).Object
(specifically a BO
) representing the data item for the given row,
or null
if the row index is out of bounds.public int getRowForObject(java.lang.Object o)
This method performs a linear search on the internal "rows" array to find the index of the provided object. The comparison is a reference equality check (==), meaning it looks for the exact same object instance, not just an object with the same content or ID.
getRowForObject
in interface FTableAtmI
o
- The Object
(specifically a BO
) to find the row index for.public java.lang.Object getObjectWithId(java.lang.Long id)
This method performs a linear search on the internal "rows" array, comparing
the "id" of each BO with the given ID. The comparison is a value equality check
(using equals()
) on the BO's ID.
id
- The Long
ID of the object to find.Object
(specifically a BO
) with the matching ID,
or null
if no such object is found or if the input ID is null
.public BO[] getRowObjects()
This method creates and returns a new array containing all the BOs from the model. This is a crucial defensive measure to ensure that external modifications to the returned array do not affect the internal state of the table model.
BO
array containing a copy of all row objects.public void refresh()
This method triggers a refresh operation, typically by invalidating the current
data and scheduling a reload. It delegates to the internal triggerRefresh()
method.
refresh
in interface FTableAtmI
public void cancel()
This method increments a refresh counter to signal cancellation and then
calls cancel(boolean)
without waiting for the cancellation to complete.
cancel
in interface FTableAtmI
public void cancel(boolean wait)
This method increments a refresh counter to signal that a refresh should be
aborted. It then calls "conf.displayStopping()" to update the UI (e.g. show a
"Canceling loading..." text in the status bar).
If "wait" is true, it blocks until the current refresh operation (represented by
"refresher" CompletableFuture
) completes or is cancelled. In that case it
should be called from outside the Event Dispatch Thread (EDT) to avoid UI freezes.
wait
- If true
, the method blocks until the current refresh operation
completes or is cancelled. If false
, it returns immediately.public void invokeAfterRefreshCompletion(java.lang.Runnable r)
Runnable
after the current data refresh operation has completed.
This method is designed to be called from outside the Event Dispatch Thread (EDT)
as it might block to wait upon completion of the passed Runnaböe.
It ensures that any pending changes propagate through the model via the transaction's
message bus. The provided Runnable
is then either executed immediately (if no
refresh is ongoing) or queued to run upon refresh completion.
r
- The Runnable
to execute after refresh completion.java.lang.RuntimeException
- If an InterruptedException
or ExecutionException
occurs
while waiting for the refresh to complete.public static void executeAndCompleteRunner(java.lang.Runnable r, java.util.concurrent.CompletableFuture<java.lang.Void> f)
Runnable
and then completes a CompletableFuture
.
This static helper method is designed to be used in conjunction with invokeAfterRefreshCompletion(Runnable)
to wrap the execution of a callback Runnable
and signal its completion via a CompletableFuture
.
r
- The Runnable
to execute.f
- The CompletableFuture
to complete after "r.run()" finishes.public void triggerRefresh()
This method initiates the asynchronous process of updating the table's content.
It increments a refresh counter to uniquely identify this refresh request.
The actual refresh logic is executed by refreshRunner(int, Boolean, boolean)
on a separate thread (off the Event Dispatch Thread - EDT) to prevent UI blocking.
editModeSwitch
- An optional Boolean
indicating if the refresh is associated
with a switch in editing mode.
If true
, it means the table is entering editing mode;
if false
, it's exiting.
null
implies no mode switch.afterSave
- If true
, indicates that the refresh is occurring immediately
after a save operation. This can trigger specific refresh behaviors.
Defaults to false
.onCompletion
- An optional Runnable
to be executed once the refresh
operation completes. This runnable is added to a queue and executed
on the EDT. Defaults to null.public void triggerRefresh(java.lang.Boolean editModeSwitch)
public void triggerRefresh(java.lang.Boolean editModeSwitch, boolean afterSave)
public void triggerRefresh(java.lang.Boolean editModeSwitch, boolean afterSave, java.lang.Runnable onCompletion)
public boolean displaysRelation()
This is determined by checking if a display property (attribute representing a relation) has been set in the table's configuration.
true
if a display property is set, false
otherwise.public boolean displaysVirtualRelation()
A relation is considered virtual if it is a relation (as determined by displaysRelation()
)
AND the attribute representing this relation is marked as virtual in the schema.
true
if the table displays a virtual relation, false
otherwise.public boolean displaysDependentRelation()
A relation is considered dependent if it is a relation (as determined by displaysRelation()
)
AND the table's configuration indicates that it is a dependent table.
true
if the table displays a dependent relation, false
otherwise.public boolean displaysManyRelation()
This is determined by checking if a display property is set (via displaysRelation()
),
if the associated Business Object from the form context is not null, AND if the attribute
representing the display property is a many-relation in the schema.
true
if the table displays a many-relation, false
otherwise.public void addLoadingStatusListener(LoadingStatusListenerI l)
LoadingStatusListenerI
to this table model.
Listeners added via this method will be notified of changes in the loading status, specifically when the model is ready after a loading operation.
l
- The LoadingStatusListenerI
to add.public void removeLoadingStatusListener(LoadingStatusListenerI l)
LoadingStatusListenerI
from this table model.l
- The LoadingStatusListenerI
to remove.public void fireReadyLoading()
LoadingStatusListenerI
s that the model has finished loading and is ready.
This method iterates through all listeners and invokes their "readyLoading()" method.
public void addPopupElementListener(PopupElementListenerI l)
public void removePopupElementListener(PopupElementListenerI l)
public void popupElementValueSet(java.lang.Object o, java.lang.Object n)
public void popupElementValueAdded(java.lang.Object o)
public void popupElementValueRemoved(java.lang.Object o)
public void fireTableDataChanged()
This method overrides AbstractTableModel.fireTableDataChanged()
.
It ensures that the event is fired only if the table is not in a "closed" state
and that the call is made on the Event Dispatch Thread (EDT).
fireTableDataChanged
in class javax.swing.table.AbstractTableModel
public void fireTableCellUpdated(int row, int column)
This method overrides AbstractTableModel.fireTableCellUpdated(int, int)
.
It ensures that the event is fired only if the table is not in a "closed" state
and that the call is made on the Event Dispatch Thread (EDT).
fireTableCellUpdated
in class javax.swing.table.AbstractTableModel
row
- The row index of the updated cell.column
- The column index of the updated cell.public void fireTableRowsDeleted(int firstRow, int lastRow)
This method overrides AbstractTableModel.fireTableRowsDeleted(int, int)
.
It ensures that the event is fired only if the table is not in a "closed" state.
If the call is not made on the Event Dispatch Thread (EDT), it schedules the event
for synchronous execution on the EDT, blocking until completion.
fireTableRowsDeleted
in class javax.swing.table.AbstractTableModel
firstRow
- The first row index in the range of deleted rows.lastRow
- The last row index in the range of deleted rows.public void fireTableRowsInserted(int firstRow, int lastRow)
This method overrides AbstractTableModel.fireTableRowsInserted(int, int)
.
It ensures that the event is fired only if the table is not in a "closed" state
and that the call is made on the Event Dispatch Thread (EDT).
fireTableRowsInserted
in class javax.swing.table.AbstractTableModel
firstRow
- The first row index in the range of inserted rows.lastRow
- The last row index in the range of inserted rows.public void fireTableRowsUpdated(int firstRow, int lastRow)
This method overrides AbstractTableModel.fireTableRowsUpdated(int, int)
.
It ensures that the event is fired only if the table is not in a "closed" state
and that the call is made on the Event Dispatch Thread (EDT).
fireTableRowsUpdated
in class javax.swing.table.AbstractTableModel
firstRow
- The first row index in the range of updated rows.lastRow
- The last row index in the range of updated rows.public void fireTableRowsUpdated(int[] updatedRows)
This method converts an array of updated row indices into contiguous ranges
and then fires individual fireTableRowsUpdated(int, int)
events for each range.
This is a convenience method for signaling updates to multiple, potentially
scattered rows.
updatedRows
- An array of integer row indices that have been updated.public void queueCellUpdate(int row, int col)
This method adds the cell update request to an internal map (accumulatedCellUpdates) if it's not already present. It then ensures that a single collection task (collectAccumulatedCellUpdates) is scheduled on the EDT to process all accumulated updates, preventing excessive "fireTableCellUpdated" calls.
row
- The row index of the cell to update.col
- The column index of the cell to update.Copyright © 2000-2025 OAshi S.à r.l. All Rights Reserved.