它不可能是可能獲得從給定ListSelectionModel
「的」 JList
,因爲有可能是多個名單該具有相同ListSelectionModel
:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
public class SharedListSelectionModel
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
private static void createAndShowGUI()
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new BorderLayout());
DefaultListModel modelA = new DefaultListModel();
JList listA = new JList(modelA);
DefaultListModel modelB = new DefaultListModel();
JList listB = new JList(modelB);
for (int i=0; i<10; i++)
{
modelA.addElement("A"+i);
modelB.addElement("B"+i);
}
ListSelectionModel selectionModel = new DefaultListSelectionModel();
listA.setSelectionModel(selectionModel);
listB.setSelectionModel(selectionModel);
JPanel p = new JPanel(new GridLayout(1,2));
p.add(new JScrollPane(listA));
p.add(new JScrollPane(listB));
f.getContentPane().add(p, BorderLayout.CENTER);
f.setSize(300,300);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
的選擇模型是在其自己的(大致爲模型,在米傾向於MVC pattern)。但正如icza在他的回答中指出的那樣:您還可以將選擇偵聽器添加到JList
。
另一種解決方案是您手動關聯偵聽器和列表。通常,這可以在一個匿名的內部類中在本地完成:
// Declare list as "final" (or make it a field of the enclosing class)
final JList list = ...;
list.getSelectionModel().addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent e)
{
// Can access the list here:
Object object = list.getSelectedValue();
...
}
});