Вкратце, программа отображает выбранные пользователем параметры (месяцы) на экране.
Я видел вопрос под названием «Как скопировать данные из одного JList
в другой JList
?»Тем не менее, он был опубликован 5 лет назад, и мой вопрос немного отличается от этой статьи.
Проблема в том, что метод getSelectedValues()
устарел и используется в закрытом внутреннем классе ButtonListener
.
Я знаю, что метод заменен на getSelectedValuesList()
, но онтеперь возвращает List<E>
, а метод setListData
принимает массив в качестве аргумента, поэтому они не работают вместе.
У меня два вопроса.
- Что такое
E
? - Как скопировать несколько данных из
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();
}
}