【问题标题】:Copying data from JList to (another) JList将数据从 JList 复制到(另一个)JList
【发布时间】:2018-06-08 21:06:06
【问题描述】:

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

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

问题在于 getSelectedValues() 方法现在已被弃用,该方法用于私有内部类 ButtonListener

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

我有两个问题。

  1. 什么是E
  2. 如何将多个数据从JList 复制到另一个JList(最有效的方法是什么?是使用DefaultListModel 吗?)?

这里是代码。

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();
   }
}

【问题讨论】:

    标签: java swing collections jlist deprecated


    【解决方案1】:

    已弃用的getSelectedValues() 已更改为getSelectedValuesList(),因此您必须将所选值保存到List

    【讨论】:

      【解决方案2】:

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

      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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-03
        • 2013-12-04
        • 2011-01-08
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多