diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTable.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTable.java index 212663f..783ca2d 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTable.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTable.java @@ -78,6 +78,10 @@ public ChannelTableData getData() { return tableData_; } + public ChannelTableModel getTableModel() { + return tableModel_; + } + public JTable getTable() { return table_; } diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTableModel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTableModel.java index 48a4276..1a2fed5 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTableModel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTableModel.java @@ -20,15 +20,28 @@ public class ChannelTableModel extends AbstractTableModel { "Offset" }; - private final ChannelTableData tableData_; + private final ChannelTableData data_; public ChannelTableModel(final ChannelTableData tableData) { - tableData_ = Objects.requireNonNull(tableData); + data_ = Objects.requireNonNull(tableData); + } + + public void addEmptyChannel() { + final int rowIndex = data_.getNumChannels(); + data_.addEmptyChannel(); + fireTableRowsInserted(rowIndex, rowIndex); + } + + public void removeChannel(int rowIndex) { + if (rowIndex != -1) { + data_.removeChannel(rowIndex); + fireTableRowsDeleted(rowIndex, rowIndex); + } } @Override public int getRowCount() { - return tableData_.getNumChannels(); + return data_.getNumChannels(); } @Override @@ -63,7 +76,7 @@ public boolean isCellEditable(int row, int col) { @Override public Object getValueAt(int row, int col) { - final ChannelSpec channelSpec = tableData_.getChannelByIndex(row); + final ChannelSpec channelSpec = data_.getChannelByIndex(row); switch (col) { case COLUMN_USE: return channelSpec.isUsed(); @@ -78,7 +91,7 @@ public Object getValueAt(int row, int col) { @Override public void setValueAt(Object value, int row, int col) { - final ChannelSpec channelSpec = tableData_.getChannelByIndex(row); + final ChannelSpec channelSpec = data_.getChannelByIndex(row); switch (col) { case COLUMN_USE: if (value instanceof Boolean) { diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTablePanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTablePanel.java index 76203b0..edb0521 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTablePanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTablePanel.java @@ -83,27 +83,22 @@ private void createEventHandlers() { // add channel btnAddChannel_.registerListener(e -> { - table_.getData().addEmptyChannel(); -// revalidate(); // updates JScrollBar when adding elements - table_.refreshData(); -// table_.repaint(); -// repaint(); - //System.out.println("add channel"); - //table_.getData().printChannelData(); + table_.getTableModel().addEmptyChannel(); final ChannelSpec[] channels = table_.getData().getChannels(); model_.acquisitions().settingsBuilder().channels(channels); model_.acquisitions().settingsBuilder().numChannels(channels.length); + //System.out.println("add channel"); + //table_.getData().printChannelData(); }); // remove channel btnRemoveChannel_.registerListener(e -> { final int row = table_.getTable().getSelectedRow(); if (row != -1) { // is any row selected? - table_.getData().removeChannel(row); + table_.getTableModel().removeChannel(row); final ChannelSpec[] channels = table_.getData().getChannels(); model_.acquisitions().settingsBuilder().channels(channels); model_.acquisitions().settingsBuilder().numChannels(channels.length); - table_.refreshData(); //System.out.println("remove row index: " + row); } }); diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/channels/ChannelTableData.java b/src/main/java/org/micromanager/lightsheetmanager/model/channels/ChannelTableData.java index 4e1a48a..d677488 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/channels/ChannelTableData.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/channels/ChannelTableData.java @@ -58,7 +58,9 @@ public void addChannel(final ChannelSpec channel) { } public void removeChannel(final int index) { - channels_.remove(index); + if (index >= 0 && index < channels_.size()) { + channels_.remove(index); + } } public void removeAllChannels() {