diff --git a/src/main/kotlin/TableEditor.kt b/src/main/kotlin/TableEditor.kt index 40cb0de..acc1ced 100644 --- a/src/main/kotlin/TableEditor.kt +++ b/src/main/kotlin/TableEditor.kt @@ -22,6 +22,7 @@ import kotlin.collections.ArrayList class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace("_"," ").toLowerCase()}") { val searchField = JTextField() val model = DefaultTableModel() + val rowHeaderModel = DefaultTableModel() var table = object : JTable(model){ override fun editCellAt(p0: Int, p1: Int): Boolean { return super.editCellAt(p0, p1, null) @@ -42,6 +43,7 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace(" return super.editCellAt(p0, p1, p2) } } + var rowHeaderTable = JTable(rowHeaderModel) val sorter = TableRowSorter(model) init { @@ -67,6 +69,7 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace(" addButton.addActionListener { getData().add(JSONObject()) model.addRow(arrayOf()) + rowHeaderModel.addRow(arrayOf()) confirmation.isVisible = true } @@ -83,6 +86,15 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace(" searchPanel.add(saveButton) val pane = JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS) + + if (editor != Editors.OBJECT_CONFIGS) { + pane.setRowHeaderView(rowHeaderTable) + val headerSize = pane.rowHeader.maximumSize + headerSize.width = 200 + pane.rowHeader.maximumSize = headerSize + pane.rowHeader.preferredSize = headerSize + } + add(pane, BorderLayout.CENTER) add(searchPanel, BorderLayout.NORTH) @@ -101,16 +113,17 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace(" table.columnModel.getColumn(0).preferredWidth = 400 table.columnModel.getColumn(1).preferredWidth = 600 } else { - model.addColumn("id") - model.addColumn("name") + rowHeaderModel.addColumn("id") + rowHeaderModel.addColumn("name") + rowHeaderTable.columnModel.getColumn(0).preferredWidth = 85 + rowHeaderTable.columnModel.getColumn(0).maxWidth = 85 + rowHeaderTable.columnModel.getColumn(1).preferredWidth = 200 + rowHeaderTable.columnModel.getColumn(1).maxWidth = 200 keys.remove("id") keys.remove("name") } keys.sortedBy { it.toString() }.forEach { model.addColumn(it) } - if(editor != Editors.OBJECT_CONFIGS) { - table.columnModel.getColumn(1).preferredWidth = 150 - } model.addTableModelListener(object : TableModelListener{ override fun tableChanged(event: TableModelEvent?) { @@ -130,6 +143,7 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace(" val realRow = table.convertRowIndexToModel(table.selectedRows[0]) getData().removeAt(realRow) model.removeRow(realRow) + rowHeaderModel.removeRow(realRow) } repaint() } catch(e: Exception){ @@ -158,6 +172,7 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace(" val copyData = jsonData.clone() as JSONObject getData().add(insertPos, copyData) model.insertRow(insertPos, copiedRow) + rowHeaderModel.insertRow(insertPos, arrayOf(copyData["id"], copyData["name"])) } table.revalidate() table.repaint() @@ -175,11 +190,15 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace(" for(datum in data){ val vals = JSONArray() + val idName = JSONArray() + idName.add(datum["id"]) + idName.add(datum["name"]) for(i in 0 until model.columnCount){ val label = model.getColumnName(i) vals.add(datum[label] ?: "") } model.addRow(vals.toArray()) + rowHeaderModel.addRow(idName.toArray()) } isVisible = true }