java input下拉列表_使用下拉列表在Java中创建自动填充文本框

这个示例展示了如何在Java中使用Kotlin构建一个自动填充的文本框,利用AutoSuggestor类处理输入并显示下拉建议。当用户输入时,会根据预定义的单词列表提供匹配项,并支持上下键导航和ESC键关闭。
摘要由CSDN通过智能技术生成

建立在David的解决方案之上:

我添加了UP按键功能,还添加了ESC按键功能以隐藏弹出窗口。除此之外,您可以在构造AutoSuggestor对象时指定回调函数,当从列表中选择建议时将调用该函数。

import javax.swing.border.LineBorder

import java.util.ArrayList

import javax.swing.event.DocumentListener

import java.awt.*

import java.awt.event.*

import javax.swing.*

import javax.swing.event.DocumentEvent

/**

* Author of the original version: David @ https://stackoverflow.com/users/1133011/david-kroukamp

*/

class Test {

init {

val frame = JFrame()

frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE

val f = JTextField(10)

val autoSuggestor = object : AutoSuggestor(f, frame, ArrayList(), Color.WHITE.brighter(), Color.BLUE, Color.RED, 0.75f) {

override fun wordTyped(typedWord: String?): Boolean {

//create list for dictionary this in your case might be done via calling a method which queries db and returns results as arraylist

val words = ArrayList()

words.add("hello")

words.add("heritage")

words.add("happiness")

words.add("goodbye")

words.add("cruel")

words.add("car")

words.add("war")

words.add("will")

words.add("world")

words.add("wall")

setDictionary(words)

//addToDictionary("bye");//adds a single word

return super.wordTyped(typedWord)//now call super to check for any matches against newest dictionary

}

}

val p = JPanel()

p.add(f)

frame.add(p)

frame.pack()

frame.isVisible = true

}

companion object {

@JvmStatic

fun main(args: Array) {

SwingUtilities.invokeLater { Test() }

}

}

}

internal open class AutoSuggestor(val textField: JTextField, val container: Window, words: ArrayList, popUpBackground: Color, private val suggestionsTextColor: Color, private val suggestionFocusedColor: Color, opacity: Float, private val callback: (String) -> Unit = {}) {

private val suggestionsPanel: JPanel

val autoSuggestionPopUpWindow: JWindow

private var typedWord: String? = null

private val dictionary = ArrayList()

private var currentIndexOfSpace: Int = 0

private var tW: Int = 0

private var tH: Int = 0

private val documentListener = object : DocumentListener {

override fun insertUpdate(de: DocumentEvent) {

checkForAndShowSuggestions()

}

override fun removeUpdate(de: DocumentEvent) {

checkForAndShowSuggestions()

}

override fun changedUpdate(de: DocumentEvent) {

checkForAndShowSuggestions()

}

}

val addedSuggestionLabels: ArrayList

get() {

val sls = ArrayList()

for (i in 0 until suggestionsPanel.componentCount) {

if (suggestionsPanel.getComponent(i) is SuggestionLabel) {

val sl = suggestionsPanel.getComponent(i) as SuggestionLabel

sls.add(sl)

}

}

return sls

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值