Java 允许用户在JList上选择多个项目

Java 允许用户在JList上选择多个项目,java,swing,jlist,multi-select,Java,Swing,Jlist,Multi Select,我想允许用户在JList中选择多个值/项 public class ChatClient { DefaultListModel listModel = new DefaultListModel(); JList onlineList = new JList(listModel); public ChatClient() { onlineList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL

我想允许用户在
JList
中选择多个值/项

public class ChatClient {

    DefaultListModel listModel = new DefaultListModel();
    JList onlineList = new JList(listModel);

    public ChatClient() {

        onlineList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    }

我试过了,但没用。它不允许在
JList
中选择多个值

public class ChatClient {

    DefaultListModel listModel = new DefaultListModel();
    JList onlineList = new JList(listModel);

    public ChatClient() {

        onlineList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    }

ChatClient.java的完整代码:


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Arrays;
import java.util.HashSet;

import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

public class ChatClient {

    BufferedReader in;
    PrintWriter out;
    JFrame frame = new JFrame("Chatter");
    JTextField textField = new JTextField(40);
    JTextArea messageArea = new JTextArea(8, 40);


    JCheckBox checkBox = new JCheckBox("Broadcast");
    DefaultListModel listModel = new DefaultListModel();
    JList onlineList = new JList(listModel);


    public ChatClient() {

        onlineList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        textField.setEditable(false);
        messageArea.setEditable(false);
        frame.getContentPane().add(textField, "North");
        frame.getContentPane().add(checkBox,BorderLayout.WEST);
        frame.getContentPane().add(new JScrollPane(messageArea), "South");
        frame.getContentPane().add(new JScrollPane(onlineList), "Center");

        frame.pack();

        onlineList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        checkBox.setSelected(true);

        textField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                if (checkBox.isSelected()) {
                    out.println(textField.getText());
                    textField.setText("");
                }
                else {
                    System.out.println(Arrays.asList(onlineList.getSelectedIndices())); //For testing
                    String selectedName = (String) onlineList.getSelectedValue();
                    out.println(selectedName + ">>"+ textField.getText());
                    textField.setText("");
                }
            }
        });


    }

    private String getServerAddress() {
        return JOptionPane.showInputDialog(
            frame,
            "Enter IP Address of the Server:",
            "Welcome to the Chatter",
            JOptionPane.QUESTION_MESSAGE);
    }

    private String getName() {
        return JOptionPane.showInputDialog(
            frame,
            "Choose a screen name:",
            "Screen name selection",
            JOptionPane.PLAIN_MESSAGE);
    }

    private void run() throws IOException {

        String serverAddress = getServerAddress();
        Socket socket = new Socket(serverAddress, 9001);
        in = new BufferedReader(new InputStreamReader(
            socket.getInputStream()));
        out = new PrintWriter(socket.getOutputStream(), true);

        while (true) {
            String line = in.readLine();
            if (line.startsWith("SUBMITNAME")) {
                out.println(getName());
            } else if (line.startsWith("NAMEACCEPTED")) {
                textField.setEditable(true);
            } else if (line.startsWith("MESSAGE")) {
                messageArea.append(line.substring(8) + "\n");
            } else if (line.startsWith("NEWUSER")) {
                listModel.addElement(line.substring(7));
            } else if (line.startsWith("USEROUT")) {
                listModel.removeElement(line.substring(7));
            }
        }
    }

    public static void main(String[] args) throws Exception {
        ChatClient client = new ChatClient();
        client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        client.frame.setVisible(true);
        client.run();
    }
}
对我来说,你的代码是有效的。 请按SHIFT/CTRL+click,确保多选(在Linux上)有效。这可能就是你错过的

对我来说,你的代码很有效。 请按SHIFT/CTRL+click,确保多选(在Linux上)有效。这可能就是你错过的


CTRL+Click不带或不带
onlineList.setSelectionMode(ListSelectionModel.MULTIPLE\u INTERVAL\u SELECTION)但它不会使用
getSelectedDices()返回所有选定项只有一个正在重试。我用于返回选定值的方法是否有问题?如何让此用户只需单击即可选择多个项目。GetSelectedDices()或getSelectedValuesList()正是您要查找的内容。请注意,在测试代码中,您只打印onlineList.getSelectedValue()中的单个结果;按住CTRL键并单击可以不使用或不使用
onlineList.setSelectionMode(ListSelectionModel.MULTIPLE\u INTERVAL\u SELECTION)但它不会使用
getSelectedDices()返回所有选定项只有一个正在重试。我用于返回选定值的方法是否有问题?如何让此用户只需单击即可选择多个项目。GetSelectedDices()或getSelectedValuesList()正是您要查找的内容。请注意,在测试代码中,您只打印onlineList.getSelectedValue()中的单个结果;