首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数据从JList复制到(另一个) JList

将数据从JList复制到(另一个) JList
EN

Stack Overflow用户
提问于 2018-06-09 05:06:07
回答 2查看 200关注 0票数 0

简而言之,该程序在屏幕上显示用户选择的选项(月份)。

我看到了标题为“如何将数据从一个JList复制到另一个JList?”的问题。然而,它是在5年前发布的,我的问题与那篇文章略有不同。

问题是现在不推荐使用在私有内部类ButtonListener中使用的getSelectedValues()方法。

我知道该方法已替换为getSelectedValuesList(),但它现在返回一个数组,并且setListData方法接受List<E>作为其参数,因此它们不能协同工作。

我有两个问题。

什么是E

  • How
  1. 我可以将多个数据从一个JList拷贝到另一个JList (最有效的方法是什么?它是否使用DefaultListModel?)?

下面是代码。

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


public class MultipleIntervalSelection extends JFrame
{
   private JPanel monthPanel;
   private JPanel selectedMonthPanel;
   private JPanel buttonPanel;

   private JList<String> monthList;
   private JList<String> selectedMonthList;

   private JScrollPane scrollPane1;
   private JScrollPane scrollPane2;

   private JButton button;

   private String[] months = {"January", "February", "March", "April", "May",
                              "June", "July", "August", "September", "October", 
                              "November", "December"};

   public MultipleIntervalSelection()
   {
      setTitle("Multi Selections");

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      setLayout(new BorderLayout());

      buildMonthPanel();
      buildSelectedMonthsPanel();
      buildButtonPanel();

      add(monthPanel, BorderLayout.NORTH);
      add(selectedMonthPanel, BorderLayout.CENTER);
      add(buttonPanel, BorderLayout.SOUTH);            

      pack();
      setVisible(true);
   }

   private void buildMonthPanel()
   {
      monthPanel = new JPanel();

      monthList = new JList<>(months);

      monthList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

      monthList.setVisibleRowCount(6);

      scrollPane1 = new JScrollPane(monthList);

      monthPanel.add(scrollPane1);
   }                            

   private void buildSelectedMonthsPanel()
   {
      selectedMonthPanel = new JPanel();

      selectedMonthList = new JList<>();

      selectedMonthList.setVisibleRowCount(6);

      scrollPane2 = new JScrollPane(selectedMonthList);

      selectedMonthPanel.add(scrollPane2);
   }        

   private void buildButtonPanel()
   {
      buttonPanel = new JPanel();

      button = new JButton("Get Selections");

      button.addActionListener(new ButtonListener());

      buttonPanel.add(button);
   }

   private class ButtonListener implements ActionListener
   {
      public void actionPerformed(ActionEvent e)
      {
         Object[] selections = monthList.getSelectedValues();

         selectedMonthList.setListData(selections);
      }
   }

   public static void main(String[] args)
   {
      new MultipleIntervalSelection();
   }
}
EN

回答 2

Stack Overflow用户

发布于 2018-06-09 05:14:52

不推荐使用的getSelectedValues()已更改为getSelectedValuesList(),因此您必须将选定的值保存到List

票数 0
EN

Stack Overflow用户

发布于 2018-06-09 12:29:49

只需获取列表并将其转换为数组,如下所示:

代码语言:javascript
复制
private class ButtonListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        List<String> list = monthList.getSelectedValuesList();
        int size = list.size();
        String[] values = new String[size];
        for (int ii=0; ii<size; ii++) {
            values[ii] = list.get(ii);
        }
        selectedMonthList.setListData(values);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768395

复制
相关文章

相似问题

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