여러리스트가있을 수 있기 때문에하기, ListSelectionModel
주어진 행의 ""JList
를 얻을 수 없을 수 final
로컬 변수 익명 클래스로부터 액세스 할 수 있기 때문에,이 예에서는 단순히 availabe이다 이 가지고있는 같은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);
}
}
선택 모델이 m에, 약 (자체 모델이다 MVC pattern의 eaning). 그러나 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();
...
}
});