Pin NPC/Item ID/Name to the left side no matter how much you scroll

This commit is contained in:
ceikry 2022-09-05 11:29:35 -05:00
parent 3d76b929fa
commit 59dae1140f

View file

@ -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
}