Как создать диалоговое окно параметров в Scala
Я пытался создать диалоговое окно параметров, которое не ограничивается двумя или тремя вариантами (Option.YesNo или Option.YesNoCancel), но мне не удалось найти способ использовать что-либо, кроме этих встроенных параметров. В частности, следующий отказывается принимать все, что я могу поставить для optionType:
object Choices extends Enumeration {
type Choice = Value
val red, yellow, green, blue = Value
}
val options = List("Red", "Yellow", "Green", "Blue")
label.text = showOptions(null,
"What is your favorite color?",
"Color preference",
optionType = Choices.Value,
entries = options,
initial = 2) match {
case Choice.red => "Red"
case Choice.yellow => "Yellow"
case Choice.green => "Green"
case Choice.blue => "Blue"
case _ => "Some other color"
}
2 ответа
Да, это одна из многих ошибок дизайна в Scala-Swing. Вы можете написать свой собственный showOptions
метод:
import swing._
import Swing._
import javax.swing.{UIManager, JOptionPane, Icon}
def showOptions[A <: Enumeration](
parent: Component = null,
message: Any,
title: String = UIManager.getString("OptionPane.titleText"),
messageType: Dialog.Message.Value = Dialog.Message.Question,
icon: Icon = EmptyIcon,
entries: A,
initial: A#Value): Option[A#Value] = {
val r = JOptionPane.showOptionDialog(
if (parent == null) null else parent.peer, message, title, 0,
messageType.id, Swing.wrapIcon(icon),
entries.values.toArray[AnyRef], initial)
if (r < 0) None else Some(entries(r))
}
val res = showOptions(message = "Color", entries = Choices, initial = Choices.green)
Если вы хотите вместо этого передавать строки, измените на entries: Seq[Any]
, initial: Int
использовать entries(initial)
в вызове, и просто вернуть r
из Int
,
optionType
не для передачи в типе Scala, и на самом деле я не уверен, какова его цель в этом API. Но вы можете просто установить optionType = Options.YesNoCancel
и это должно сработать, я думаю.