Java swing JOptionPane:结合showInputDialog和showOptionDialog?

Bab*_*ger 1 java user-interface swing joptionpane

我在这里关注API:

http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html#showOptionDialog%28java.awt.Component,%20java.lang.Object,%20java.lang.String,%20int ,%20int,%20javax.swing.Icon,%20java.lang.Object [],%20java.lang.Object%29

我有一个项目列表,我想在提示窗口的ComboBox中显示.来自JOptionPane的showInputDialog方法允许我这样做,但它限制了我两个按钮(确定和取消).我想有更多按钮(我可以定义更多按钮,但我不知道如何使用showInputDialog将其添加到此窗口).

我可以使用showOptionDialog创建一个选项数组(包含我需要的所有按钮),但是提示窗口无法显示我的项目列表.通常接受项目数组的参数(在showInputDialog中)现在需要一个按钮数组.

Object[] selectionValues replaced by Object[] options
Run Code Online (Sandbox Code Playgroud)

有没有办法结合他们的功能?

我可以在技术上创建一个新的GUI来实现这一点,但如果已经有一个现有的实现,我可能会做很多不必要的工作.此外,在能够对原始帧执行任何操作之前,用户在新提示窗口上完成任务非常重要.

所以最后,这应该发生:

  1. 用户点击某些内容并出现提示窗口.
  2. 提示窗口显示组合框(Dropbox?)项目列表.
  3. 用户选择其中一个项目并可以选择按ok,取消,跳过,...(我已定义的任意数量的按钮)3a.在单击新提示窗口上的某个按钮之前,用户无法对原始GUI执行任何操作.
  4. 当单击其中一个按钮时,它执行它的功能,用户可以继续主GUI.

Hov*_*els 6

您可以创建一个包含JComboBox的JPanel,然后将其放入任何您想要作为Object参数的JOptionPane中.

例如,

import javax.swing.JComboBox;
import javax.swing.JOptionPane;

public class JComboFun {
   public static void main(String[] args) {
      String[] weekdays = { "Monday", "Tuesday", "Wednesday", "Thursday",
            "Friday" };
      final JComboBox<String> combo = new JComboBox<>(weekdays);

      String[] options = { "OK", "Cancel", "Fugedaboutit" };

      String title = "Title";
      int selection = JOptionPane.showOptionDialog(null, combo, title,
            JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null,
            options, options[0]);

      if (selection > 0) {
         System.out.println("selection is: " + options[selection]);
      }

      Object weekday = combo.getSelectedItem();
      if (weekday != null) {
         System.out.println("weekday: " + weekday);
      }

   }
}
Run Code Online (Sandbox Code Playgroud)