Update sorter so the first row actually gets sorted too

This commit is contained in:
GregF 2025-08-27 17:45:38 +00:00 committed by Ceikry
parent c7334798f6
commit 9a68867769
2 changed files with 37 additions and 20 deletions

View file

@ -13,20 +13,27 @@ import javax.swing.table.TableRowSorter
object NPCMenu : JFrame("NPC Selection Menu") {
var model = DefaultTableModel()
var searchField = JTextField()
var searchNameField = JTextField()
var searchIdField = JTextField()
var sorter = TableRowSorter(model)
var cellRenderer = DefaultTableCellRenderer()
var populated = false
var caller: ((Int,String) -> Unit)? = null
private fun filter() {
var rf: RowFilter<DefaultTableModel?, Any?>? = null
//If current expression doesn't parse, don't update.
rf = try {
RowFilter.regexFilter("(?i)${searchField.text}")
} catch (e: PatternSyntaxException) {
return
}
sorter.rowFilter = rf
val rfs: List<RowFilter<DefaultTableModel?, Any?>?,> = listOf(
try {
RowFilter.regexFilter("(?i)${searchNameField.text}", 1)
} catch (e: PatternSyntaxException) {
null
},
try {
RowFilter.regexFilter(searchIdField.text, 0)
} catch (e: PatternSyntaxException) {
return
}
)
sorter.rowFilter = RowFilter.andFilter(rfs)
}
fun open() {
@ -47,10 +54,14 @@ object NPCMenu : JFrame("NPC Selection Menu") {
layout = BorderLayout()
cellRenderer.toolTipText = "Double-Click to select."
val searchPanel = JPanel()
val searchLabel = JLabel("Search for NPC:")
searchField.preferredSize = Dimension(100, 20)
searchPanel.add(searchLabel)
searchPanel.add(searchField)
val searchIdLabel = JLabel("Search for ID:")
val searchNameLabel = JLabel("Search for NPC:")
searchIdField.preferredSize = Dimension(100, 20)
searchNameField.preferredSize = Dimension(100, 20)
searchPanel.add(searchIdLabel)
searchPanel.add(searchIdField)
searchPanel.add(searchNameLabel)
searchPanel.add(searchNameField)
add(searchPanel, BorderLayout.NORTH)
setLocationRelativeTo(null)
val npcTable: JTable = object : JTable(model) {
@ -81,13 +92,21 @@ object NPCMenu : JFrame("NPC Selection Menu") {
override fun mouseEntered(mouseEvent: MouseEvent) {}
override fun mouseExited(mouseEvent: MouseEvent) {}
})
searchField.addKeyListener(object : KeyListener {
override fun keyTyped(keyEvent: KeyEvent) {
searchNameField.addKeyListener(object : KeyListener {
override fun keyTyped(keyEvent: KeyEvent) {}
override fun keyPressed(keyEvent: KeyEvent) {}
override fun keyReleased(keyEvent: KeyEvent) {
filter()
}
})
searchIdField.addKeyListener(object : KeyListener {
override fun keyTyped(keyEvent: KeyEvent) {}
override fun keyPressed(keyEvent: KeyEvent) {}
override fun keyReleased(keyEvent: KeyEvent) {}
override fun keyReleased(keyEvent: KeyEvent) {
filter()
}
})
val scrollPane = JScrollPane(npcTable)
add(scrollPane, BorderLayout.SOUTH)

View file

@ -45,7 +45,6 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace("
}
var rowHeaderTable = JTable(rowHeaderModel)
val sorter = TableRowSorter(model)
val rowHeaderSorter = TableRowSorter(rowHeaderModel)
init {
layout = BorderLayout()
@ -62,7 +61,7 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace("
})
table.rowSorter = sorter
rowHeaderTable.rowSorter = rowHeaderSorter
rowHeaderTable.rowSorter = sorter
val addButton = JButton("Add Row")
@ -240,7 +239,6 @@ class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace("
return regex.containsMatchIn(getData()[rowId]["name"].toString())
}
}
rowHeaderSorter.rowFilter = filter
sorter.rowFilter = filter
}
}