JOptionPane从链表中预定义的选择

时间:2017-02-07 11:15:53

标签: java swing linked-list joptionpane

我目前正在开展一个项目,我必须在其中输入验证链接列表中的用户答案。在列表中有6到8个可能的答案。我正在考虑使用带有预定义选择的JOptionPane,但是如果我可以的话,我不太确定如何从链表中执行此操作?

我正在寻找一些关于如何做到这一点的帮助,甚至是关于我能做些什么的一些其他建议?关键是我需要能够验证用户输入,这就是为什么我要从预定义的选择中做到这一点。

这就是我在看的东西 http://www.java2s.com/Tutorial/Java/0240__Swing/UsingJOptionPanewithapredefinedselections.htm

正如我所说,我愿意接受任何其他建议,以便我能够做到这一点,欢迎任何建议。

:)

1 个答案:

答案 0 :(得分:2)

您发布的示例似乎完全没问题。但是,它没有解释任何事情。

首先,核心方法是

public static Object showInputDialog(Component parentComponent,
                                 Object message,
                                 String title,
                                 int messageType,
                                 Icon icon,
                                 Object[] selectionValues,
                                 Object initialSelectionValue)
                             throws HeadlessException

您可以阅读API here

所以,您基本上想要填写的内容是messagetitlemessageTypeselectionValues以及initialSelectionValue

首先messagetitle做了很多解释,所以我不会为此烦恼。

messageType参数表示消息对用户的显示方式。例如,如果您在此处使用JOptionPane.ERROR_MESSAGE,则会显示该消息,因此系统可能会发出错误提示音。

可能的选项都包含在JOptionPane中的常量。

  • ERROR_MESSAGE
  • INFORMATION_MESSAGE
  • WARNING_MESSAGE
  • QUESTION_MESSAGE
  • PLAIN_MESSAGE

现在,关键参数是selectionValues,其类型为Object[]。 API表示它是一组对象,可以提供可能的选择,因此基本上就是您目前在列表中所拥有的内容。您只需将其转换为Array(在下面的示例中,我使用临时副本,这对6-8值完全没问题。)

最后但并非最不重要的是,initialSelectionValue允许您指定最初应选择的值。

因此,您想要做的就像是

public Foo select(List<Foo> options, String message, String title, Foo initiallySelected) {
    return (Foo)JOptionPane.showInputDialog(
        null, // we don't have a parent component in this example
        message, // the message that will appear above the selection
        title, // the title that will appear in the window's caption
        JOptionPane.QUESTION_MESSAGE, // style is question
        null, // we don't show an Icon here, it's just a gimmick
        list.toArray(), // the values which can be selected from
        initiallySelected // the initially selected value
    );
}