'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 |
|---|
