JOptionpane多选

时间:2014-02-21 18:04:02

标签: java swing jlist joptionpane

我将从Java中的JOptionpane中选择多个值。从此窗格中获取这些多个值的解决方案是什么?当我尝试在我选择两个或更多选择时总是只返回一个值。

String bigList[] = new String[bankReferentie.aantalKlanten()];

for (int i = 0; i < bigList.length; i++) {
    bigList[i] = bankReferentie.getKlanten(i).toString();
}

JOptionPane.showMessageDialog(null, new JList(bigList), "Rekening", JOptionPane.PLAIN_MESSAGE);

3 个答案:

答案 0 :(得分:3)

这里的技巧是在显示选项窗格之前创建JList,然后在显示选项窗格后查询它。

import java.awt.BorderLayout;
import java.util.List;
import javax.swing.*;

class MultiSelectListInOptionPane {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new BorderLayout());

                String[] fruit = {"Apple", "Banana", "Grapefruit", "Orange"};
                JList<String> list = new JList<String>(fruit);
                gui.add(new JScrollPane(list));

                JOptionPane.showMessageDialog(
                        null, 
                        gui,
                        "Rekening",
                        JOptionPane.QUESTION_MESSAGE);
                List items = (List)list.getSelectedValuesList();
                for (Object item : items) {
                    System.out.println("Selected: " + item);
                }
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency
        SwingUtilities.invokeLater(r);
    }
}

E.G。输出

run:
Selected: Banana
Selected: Orange
BUILD SUCCESSFUL (total time: 7 seconds)

答案 1 :(得分:0)

来自javadocs http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html

  

Object [] getOptions()   返回用户可以做出的选择。

答案 2 :(得分:0)

由于这是 Google 上评分最高的 StackOverflow 答案,我想我会添加我的经验。

我有以下要求:

Multi-Selection list of values 
Have a single value pre-selected
Provide an OK / Cancel option 
Prompt the user to choose

我需要知道用户是选择了某些内容,还是取消了操作 - 可能是因为选择的项目不包含他们感兴趣的内容。或者他们只是决定不继续。

似乎使用 JOptionPane 执行此操作的唯一方法如下:

    String[] names = {"name", "name2", "etc"};
    JList<String> list = new JList<String>(names);
    list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    list.setSelectedIndex(0); // default selection

    JPanel gui = new JPanel(new FlowLayout());
    gui.add(new JScrollPane(list));

    int result = JOptionPane.showOptionDialog( frame,
                        gui,
                        "Choose Something (for shit sake !)",
                        JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.PLAIN_MESSAGE,
                        null,  // icon
                        null,  // list
                        null); // initial selection

请注意,列表和初始选择为空 - 因为它们是在 JPanel 对象中提供的。