我在这里关注API:
我有一个项目列表,我想在提示窗口的ComboBox中显示。来自JOptionPane的showInputDialog方法允许我这样做,但它限制了我两个按钮(确定和取消)。我想有更多按钮(我可以定义更多按钮,但我不知道如何使用showInputDialog将其添加到此窗口)。
我可以使用showOptionDialog创建一个选项数组(包含我需要的所有按钮),但是提示窗口无法显示我的项目列表。通常接受项目数组的参数(在showInputDialog中)现在需要一个按钮数组。
Object[] selectionValues replaced by Object[] options
有没有办法合并他们的功能?
我可以在技术上创建一个新的GUI来实现这一点,但如果已经有一个现有的实现,我可能会做很多不必要的工作。此外,重要的是用户在新的提示窗口上完成任务,然后才能在原始帧上执行任何操作。
所以最终,这应该发生:
答案 0 :(得分: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);
}
}
}
答案 1 :(得分:1)
我有一个项目列表,我想在提示符中的ComboBox中显示 窗口。 JOptionPane的showInputDialog方法允许我这样做 就是这样,但是它限制了我两个按钮(确定和取消)。一世 想拥有更多按钮(我可以定义更多按钮,但是我 我不知道如何使用showInputDialog将它添加到这个窗口。
您的问题得到了很好的解答,但是可以在不需要额外努力的情况下创建大量的JComponents,这是可能的,很容易将一堆JButton和JComboBox放在一起(HFOE和camickr的答案)一个JOptionPane
: - )
import java.awt.EventQueue;
import javax.swing.Icon;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
public class MyOptionPane {
public MyOptionPane() {
Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
Object[] possibilities = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Integer i = (Integer) JOptionPane.showOptionDialog(null,
null, "ShowInputDialog",
JOptionPane.PLAIN_MESSAGE, 1, errorIcon, possibilities, 0);
// or
Integer ii = (Integer) JOptionPane.showInputDialog(null,
"Select number:\n\from JComboBox", "ShowInputDialog",
JOptionPane.PLAIN_MESSAGE, errorIcon, possibilities, "Numbers");
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyOptionPane mOP = new MyOptionPane();
}
});
}
}