如何从此示例中的目标列表中获取所有值

我发现这个例子有两个JList 。 如何从目标JList获取所有值? 我是Java的新手,我想从第二个列表中获取所有值来进行一些测试来学习。

示例图像

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; import javax.swing.AbstractListModel; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; import javax.swing.ListModel; public class DualListBox extends JPanel { private static final Insets EMPTY_INSETS = new Insets(0, 0, 0, 0); private static final String ADD_BUTTON_LABEL = "Add >>"; private static final String REMOVE_BUTTON_LABEL = "<< Remove"; private static final String DEFAULT_SOURCE_CHOICE_LABEL = "Available Choices"; private static final String DEFAULT_DEST_CHOICE_LABEL = "Your Choices"; private JLabel sourceLabel; private JList sourceList; private SortedListModel sourceListModel; private JList destList; private SortedListModel destListModel; private JLabel destLabel; private JButton addButton; private JButton removeButton; public DualListBox() { initScreen(); } public String getSourceChoicesTitle() { return sourceLabel.getText(); } public void setSourceChoicesTitle(String newValue) { sourceLabel.setText(newValue); } public String getDestinationChoicesTitle() { return destLabel.getText(); } public void setDestinationChoicesTitle(String newValue) { destLabel.setText(newValue); } public void clearSourceListModel() { sourceListModel.clear(); } public void clearDestinationListModel() { destListModel.clear(); } public void addSourceElements(ListModel newValue) { fillListModel(sourceListModel, newValue); } public void setSourceElements(ListModel newValue) { clearSourceListModel(); addSourceElements(newValue); } public void addDestinationElements(ListModel newValue) { fillListModel(destListModel, newValue); } private void fillListModel(SortedListModel model, ListModel newValues) { int size = newValues.getSize(); for (int i = 0; i = 0; --i) { sourceListModel.removeElement(selected[i]); } sourceList.getSelectionModel().clearSelection(); } private void clearDestinationSelected() { Object selected[] = destList.getSelectedValues(); for (int i = selected.length - 1; i >= 0; --i) { destListModel.removeElement(selected[i]); } destList.getSelectionModel().clearSelection(); } private void initScreen() { setBorder(BorderFactory.createEtchedBorder()); setLayout(new GridBagLayout()); sourceLabel = new JLabel(DEFAULT_SOURCE_CHOICE_LABEL); sourceListModel = new SortedListModel(); sourceList = new JList(sourceListModel); add(sourceLabel, new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.NONE, EMPTY_INSETS, 0, 0)); add(new JScrollPane(sourceList), new GridBagConstraints(0, 1, 1, 5, .5, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, EMPTY_INSETS, 0, 0)); addButton = new JButton(ADD_BUTTON_LABEL); add(addButton, new GridBagConstraints(1, 2, 1, 2, 0, .25, GridBagConstraints.CENTER, GridBagConstraints.NONE, EMPTY_INSETS, 0, 0)); addButton.addActionListener(new AddListener()); removeButton = new JButton(REMOVE_BUTTON_LABEL); add(removeButton, new GridBagConstraints(1, 4, 1, 2, 0, .25, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets( 0, 5, 0, 5), 0, 0)); removeButton.addActionListener(new RemoveListener()); destLabel = new JLabel(DEFAULT_DEST_CHOICE_LABEL); destListModel = new SortedListModel(); destList = new JList(destListModel); add(destLabel, new GridBagConstraints(2, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.NONE, EMPTY_INSETS, 0, 0)); add(new JScrollPane(destList), new GridBagConstraints(2, 1, 1, 5, .5, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, EMPTY_INSETS, 0, 0)); } public static void main(String args[]) { JFrame f = new JFrame("Dual List Box Tester"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DualListBox dual = new DualListBox(); dual.addSourceElements(new String[] { "One", "Two", "Three" }); dual.addSourceElements(new String[] { "Four", "Five", "Six" }); dual.addSourceElements(new String[] { "Seven", "Eight", "Nine" }); dual.addSourceElements(new String[] { "Ten", "Eleven", "Twelve" }); dual .addSourceElements(new String[] { "Thirteen", "Fourteen", "Fifteen" }); dual.addSourceElements(new String[] { "Sixteen", "Seventeen", "Eighteen" }); dual.addSourceElements(new String[] { "Nineteen", "Twenty", "Thirty" }); f.getContentPane().add(dual, BorderLayout.CENTER); f.setSize(400, 300); f.setVisible(true); } private class AddListener implements ActionListener { public void actionPerformed(ActionEvent e) { Object selected[] = sourceList.getSelectedValues(); addDestinationElements(selected); clearSourceSelected(); } } private class RemoveListener implements ActionListener { public void actionPerformed(ActionEvent e) { Object selected[] = destList.getSelectedValues(); addSourceElements(selected); clearDestinationSelected(); } } } class SortedListModel extends AbstractListModel { SortedSet model; public SortedListModel() { model = new TreeSet(); } public int getSize() { return model.size(); } public Object getElementAt(int index) { return model.toArray()[index]; } public void add(Object element) { if (model.add(element)) { fireContentsChanged(this, 0, getSize()); } } public void addAll(Object elements[]) { Collection c = Arrays.asList(elements); model.addAll(c); fireContentsChanged(this, 0, getSize()); } public void clear() { model.clear(); fireContentsChanged(this, 0, getSize()); } public boolean contains(Object element) { return model.contains(element); } public Object firstElement() { return model.first(); } public Iterator iterator() { return model.iterator(); } public Object lastElement() { return model.last(); } public boolean removeElement(Object element) { boolean removed = model.remove(element); if (removed) { fireContentsChanged(this, 0, getSize()); } return removed; } } 

我不想得到选择值; 我想要他们。

您至少可以为SortedListModel添加合适的方法,并根据需要检查其结果。

 public Object[] toArray() { return model.toArray(new String[0]); } … System.out.println(Arrays.toString(destListModel.toArray())); 

由于引用的示例早于Java 1.5中引入的generics,因此更好的解决方案是为SortedListModel指定generics类型参数 。

 private SortedListModel destListModel = new SortedListModel<>(); … class SortedListModel extends AbstractListModel { private final SortedSet model; public SortedListModel() { model = new TreeSet<>(); } public List toList() { return new ArrayList<>(model); } @Override public E getElementAt(int index) { return (E) model.toArray()[index]; } public void add(E element) { if (model.add(element)) { fireContentsChanged(this, 0, getSize()); } } … } … System.out.println(destListModel.toList()); 

从第一个列表中获取它们的方式相同,并且有一个actionPerformed方法可以在代码中执行此操作。