'Jython Jtable get edited cell value with TableModelListener

I am creating a Jtable in Jython using a custom model with editable columns. I want to get the value if any cell or column is edited. If any cell is edited, I want to print the updated value also want to update the value in the list. I need some example for Jython not for java

from javax.swing import JFrame,JPanel,JScrollPane,JTable,JButton,JCheckBox,AbstractCellEditor
from javax.swing.table import AbstractTableModel,TableCellEditor,TableCellRenderer
from java.awt import GridLayout, Dimension 
from java.lang import String, Integer, Boolean,Class,Comparable
from java.util import ArrayList, List
from java.text import DecimalFormat
from javax.swing.event import TableModelListener
import java.lang
from javax.swing import *
from java.awt import *
from javax.swing.table import DefaultTableModel

listd = list()


value = listd.append(LogEntry('hello','sd','df','fsdssf','fsdf','gf','gdgd'))
value = listd.append(LogEntry('hello','sd','df','fsdssf','fsdf','gf','gdgd'))
value = listd.append(LogEntry('hello','sd','df','fsdssf','fsdf','gf','gdgd'))
value = listd.append(LogEntry('hello','sd','df','fsdssf','fsdf','gf','gdgd'))
value = listd.append(LogEntry('hello','sd','df','fsdssf','fsdf','gf','gdgd'))
value = listd.append(LogEntry('hello','sd','df','fsdssf','fsdf','gf','gdgd'))

class ScannerTableListener(TableModelListener):
        def tableChanged(self, e):
            row = e.getFirstRow()
            col = e.getColumn()
            is_checked = table.getValueAt(row, col)
            print(is_checked)
            is_changed = e.getType() == e.UPDATE
            if is_changed:
                self.view.get_issues_object().change_total_count(self.issue_name, is_checked)
class LogEntry:
    def __init__(self, sr, url, method, postbody, TestCases,requestResponse, FunctionalityName):
        self._sr = sr
        self._url = url
        self._method = method
        self._postbody = postbody
        self._requestResponse = requestResponse
        self._FunctionalityName = FunctionalityName
        self._TestCases = TestCases
        

class IssueTableModel(AbstractTableModel):
   

    columnNames = ["#", "Issue Type/Name", "Severity", "Host", "Path"]

    columnClasses = [java.lang.Integer, java.lang.String, java.lang.String,java.lang.String, java.lang.String]



    def __init__(self, issues=None):
        
        self.issues = issues

    def getColumnCount(self):
        
        return len(self.columnNames)

    def getRowCount(self):
       
        return len(self.issues)

    def getValueAt(self, row, column):
        
        #issue = self.issues[0]
        
        if row < self.getRowCount() and column < self.getColumnCount():
            logEntry = listd[row]
            
            
            if column == 0:
                return logEntry._sr
            if column == 1:
                return logEntry._url
            if column == 2:
                return logEntry._method
            if column == 3:
                return logEntry._postbody
            if column == 4:
                return logEntry._TestCases
            return None

    
    def getColumnName(self, index):
        
        if 0 <= index < self.getColumnCount():
            return self.columnNames[index]
        else:
            return "Invalid Column Index: " + str(index)

    def getColumnClass(self, index):
       
        if 0 <= index < len(self.columnClasses):
            return self.columnClasses[index]
        return java.lang.Object

    def isCellEditable(self, row, column):
        
        return True

    def getIssue(self, index):
       
        if 0 <= index < len(self.issues):
            return self.issues[index]
        return self.issues[0]

    def addIssue(self, issue):
        
        self.issues.append(issue)
        self.fireTableDataChanged()

    def removeIssue(self, index):
       
        if 0 <= index < len(self.issues):
            del self.issues[index]
            self.fireTableDataChanged()
      


class IssueTable(JTable):


    def __init__(self, issues):
        
        model = IssueTableModel(issues)
        self.setModel(model)
        self.setAutoCreateRowSorter(True)
        
        self.getTableHeader().setReorderingAllowed(False)
        

    def addRow(self, issue):
        self.getModel().addIssue(issue)


class Example:

  def __init__(self):
    frame = JFrame("Jython JTable Example")
    frame.setSize(400, 150)
    frame.setLayout(BorderLayout())

    self.tableData = [
      ['numbers', '67890' ,'This'],
      ['mo numbers', '2598790', 'is'],
      ['got Math', '2598774', 'a'],
      ['got Numbers', '1234567', 'Column'],
      ['got pi','3.1415926', 'Apple'],]
    colNames = ('Col Labels','Go','Here')
    dataModel = DefaultTableModel(self.tableData, colNames)
    self.table = IssueTable(self.tableData )
    scanner_table_listener = ScannerTableListener()
    IssueTableModel.addTableModelListener(scanner_table_listener)

    scrollPane = JScrollPane()
    scrollPane.setPreferredSize(Dimension(300,100))
    scrollPane.getViewport().setView((self.table))

    panel = JPanel()
    panel.add(scrollPane)

    frame.add(panel, BorderLayout.CENTER)
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
    frame.setVisible(True)

if __name__ == '__main__':
        Example()

I am getting this error

Traceback (most recent call last):
  File "new.py", line 189, in <module>
    Example()
  File "new.py", line 175, in __init__
    IssueTableModel.addTableModelListener(scanner_table_listener)
TypeError: addTableModelListener(): expected 2 args; got 1


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source