Added bonus editor

This commit is contained in:
ceikry 2021-07-22 12:49:30 -05:00
parent 0111912144
commit 0ea51eb95b
2 changed files with 115 additions and 1 deletions

View file

@ -0,0 +1,93 @@
import java.awt.BorderLayout
import java.awt.Dimension
import java.awt.FlowLayout
import javax.swing.*
object BonusEditor : JFrame("Bonus Editor") {
val bonusFiels = ArrayList<JTextField>()
val bonusLabels = arrayOf("Stab ATK: ", "Slash ATK: ", "Crush ATK: ", "Magic ATK: ", "Ranged ATK: ", "Stab DEF: ", "Slash DEF: ", "Crush DEF: ", "Magic DEF: ", "Ranged DEF: ", "Summoning DEF: ", "Strength Bonus: ", "Prayer Bonus: ", "Magic Strength: ", "Ranged Strength: ")
var initialValues = Array<String>(15) { "0" }
private var callback: (result: String) -> Unit = {}
init {
layout = BorderLayout()
val panel = JPanel()
panel.layout = BoxLayout(panel, BoxLayout.PAGE_AXIS)
defaultCloseOperation = HIDE_ON_CLOSE
for(bonus in bonusLabels.indices){
val rowPanel = JPanel(FlowLayout())
val rowLabel = JLabel(bonusLabels[bonus])
val rowField = JTextField()
rowField.text = initialValues[bonus]
rowLabel.preferredSize = Dimension(200,20)
rowField.preferredSize = Dimension(100,20)
bonusFiels.add(rowField)
rowPanel.add(rowLabel)
rowPanel.add(rowField)
panel.add(rowPanel)
panel.add(JSeparator(JSeparator.HORIZONTAL))
}
val buttonPanel = JPanel(BorderLayout())
buttonPanel.minimumSize = Dimension(300,20)
val submit = JButton("Submit")
submit.addActionListener {
val sb = StringBuilder()
for(field in bonusFiels.indices){
sb.append(bonusFiels[field].text)
if(field != bonusFiels.size - 1) sb.append(",")
}
callback.invoke(sb.toString())
isVisible = false
}
val reset = JButton("Reset")
reset.addActionListener {
setFieldsToInitial()
repaint()
}
val clear = JButton("Clear")
clear.addActionListener {
setInitialValues("")
setFieldsToInitial()
repaint()
}
buttonPanel.add(reset, BorderLayout.WEST)
buttonPanel.add(submit, BorderLayout.CENTER)
buttonPanel.add(clear, BorderLayout.EAST)
panel.add(buttonPanel)
add(panel)
setLocationRelativeTo(null)
isVisible = false
pack()
}
fun setInitialValues(string: String){
val split = string.split(",")
if(split.size > 3){
for(i in initialValues.indices){
initialValues[i] = split.getOrElse(i) {"0"}
}
} else {
initialValues = Array(15) {"0"}
}
setFieldsToInitial()
}
private fun setFieldsToInitial(){
for(i in bonusFiels.indices){
bonusFiels[i].text = initialValues[i]
}
}
fun setCallback(method: (result: String) -> Unit){
callback = method
}
}

View file

@ -6,12 +6,14 @@ import java.awt.FlowLayout
import java.awt.event.ActionEvent
import java.awt.event.KeyEvent
import java.awt.event.KeyListener
import java.util.*
import java.util.regex.PatternSyntaxException
import javax.swing.*
import javax.swing.event.TableModelEvent
import javax.swing.event.TableModelListener
import javax.swing.table.DefaultTableModel
import javax.swing.table.TableRowSorter
import kotlin.collections.ArrayList
/**
* Represents a generic JTable-based editor. Pretty much just a cleaner visualisation of JSON objects with editing functionality.
@ -19,7 +21,26 @@ import javax.swing.table.TableRowSorter
class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace("_"," ").toLowerCase()}") {
val searchField = JTextField()
val model = DefaultTableModel()
var table = JTable(model)
var table = object : JTable(model){
override fun editCellAt(p0: Int, p1: Int): Boolean {
return super.editCellAt(p0, p1, null)
}
override fun editCellAt(p0: Int, p1: Int, p2: EventObject?): Boolean {
val realRow = convertRowIndexToModel(p0)
val realColumn = convertColumnIndexToModel(p1)
val columnName = model.getColumnName(realColumn)
if(columnName == "bonuses"){
val existingBonuses = model.getValueAt(realRow,realColumn).toString()
BonusEditor.setInitialValues(existingBonuses)
BonusEditor.setCallback { result ->
model.setValueAt(result, realRow, realColumn)
}
BonusEditor.isVisible = true
return false
}
return super.editCellAt(p0, p1, p2)
}
}
val sorter = TableRowSorter(model)
init {