首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用列表中选定的值?

如何使用列表中选定的值?
EN

Stack Overflow用户
提问于 2019-02-14 16:27:10
回答 2查看 334关注 0票数 2

我目前已经创建了一个多间隔选择JList,并且我希望能够对选择做一些事情。目前,我的代码只能创建一个JList,在这里我可以“突出显示”选定的对象;但是,我想要做的是将选定的对象放到一个数组或ArrayList中,这样我就可以对这些对象执行一些工作。我在网上搜索并发现了关于getSelectedValueList()的信息,但是我不知道以后如何使用和访问它。

我的另一个问题是,我正在考虑创建一个名为"Submit“的JButton,但我也想知道如何使用JList窗口。我应该在按下按钮后退出吗?

代码语言:javascript
复制
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    import java.util.List;

    public class ClassSelection extends JFrame {
         private JList classList;
         private String[] classNames = {"Programming Foundations I", 
         "Programming Foundations II",
         "Digital Design", "Computer Organization", "Programming 
         Paradigms", 
         "Honors Programming Paradigms", "Cluster Computing", 
         "Software Engineering"};

     public ClassSelection() {
         super("Classes Taken:");

         Container container = getContentPane();
         container.setLayout(new FlowLayout());

         classList = new JList(classNames);
         classList.setVisibleRowCount(5);
         classList.setFixedCellHeight(45);
         classList.setFixedCellWidth(450);

classList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTIO N);

         container.add(new JScrollPane(classList));
         setSize(600, 600);
         setVisible(true);

    }

    public static void main(String[] args) {
         ClassSelection application = new ClassSelection();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-15 03:47:34

这里有两种方法你可以做到这一点。我个人认为“办法1”就够了。但是,如果您真的想在用户按下按钮之前收集所选的项目,请使用“方法2”。

方法1-在按钮的动作侦听器中调用getSelectedValuesList()

代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.List;

public class ClassSelection extends JFrame {
  private JList classList;
  private String[] classNames = {"Programming Foundations I",
      "Programming Foundations II",
      "Digital Design", "Computer Organization",
      "Programming Paradigms",
      "Honors Programming Paradigms", "Cluster Computing",
      "Software Engineering"};

  public ClassSelection() {
    super("Classes Taken:");

    Container container = getContentPane();
    container.setLayout(new FlowLayout());

    classList = new JList(classNames);
    classList.setVisibleRowCount(5);
    classList.setFixedCellHeight(45);
    classList.setFixedCellWidth(450);

    classList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

    container.add(new JScrollPane(classList));

    JButton button = new JButton("Print selected items");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        List selectedItems = classList.getSelectedValuesList();
        System.out.println(selectedItems);
      }
    });
    container.add(button, BorderLayout.SOUTH);

    setSize(600, 600);
    setVisible(true);

  }

  public static void main(String[] args) {
    ClassSelection application = new ClassSelection();
  }
}

方法2-使用ListSelectionListener

代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.util.*;
import java.util.List;

public class ClassSelection2 extends JFrame {
  private JList classList;
  private List<String> selectedItemsList = new ArrayList<>();

  private String[] classNames = {"Programming Foundations I",
      "Programming Foundations II",
      "Digital Design", "Computer Organization",
      "Programming Paradigms",
      "Honors Programming Paradigms", "Cluster Computing",
      "Software Engineering"};

  public ClassSelection2() {
    super("Classes Taken:");

    Container container = getContentPane();
    container.setLayout(new FlowLayout());

    classList = new JList(classNames);
    classList.setVisibleRowCount(5);
    classList.setFixedCellHeight(45);
    classList.setFixedCellWidth(450);

    classList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    classList.addListSelectionListener(new ListSelectionListener() {
      @Override
      public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
          selectedItemsList.clear();
          selectedItemsList.addAll(classList.getSelectedValuesList());
        }
      }
    });

    container.add(new JScrollPane(classList));

    JButton button = new JButton("Print selected items");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        System.out.println(selectedItemsList);
      }
    });
    container.add(button, BorderLayout.SOUTH);

    setSize(600, 600);
    setVisible(true);

  }

  public static void main(String[] args) {
    ClassSelection2 application = new ClassSelection2();
  }
}
票数 1
EN

Stack Overflow用户

发布于 2019-02-14 17:14:34

请看下面的代码。它包含了你的要求。

你的第二个问题的代码就像你说的一样。

“我应该在按下按钮后退出吗?”

代码语言:javascript
复制
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

public class ClassSelection extends JFrame {
    private JList classList;
    private String[] classNames = {"Programming Foundations I",
            "Programming Foundations II",
            "Digital Design", "Computer Organization", "Programming Paradigms",
            "Honors Programming Paradigms", "Cluster Computing",
            "Software Engineering"};

    public ClassSelection() {
        super("Classes Taken:");

        Container container = getContentPane();
        container.setLayout(new FlowLayout());

        classList = new JList(classNames);
        classList.setVisibleRowCount(5);
        classList.setFixedCellHeight(45);
        classList.setFixedCellWidth(450);
        classList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        JScrollPane jScrollPane = new JScrollPane(classList);

        // First question
        List<String> myList = new ArrayList<>();

        classList.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                JList jList = (JList) e.getSource();
                String className = (String) jList.getSelectedValue();
                myList.add(className);
                System.out.println("clicked : " + className);

                // you can see the items being appended
                System.out.println("list : " + myList.toString());
            }
        });

        // Second question
        JButton btn = new JButton("Submit");
        btn.addActionListener(event -> {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            dispose();
        });

        container.add(jScrollPane);
        container.add(btn);
        setSize(600, 600);
        setVisible(true);
    }

    public static void main(String[] args) {
        ClassSelection application = new ClassSelection();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54694908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档