[英]Getting selected Items from Jlist
我看過很多文章,並嘗試了不同的方法來解決此問題,但仍然沒有得到所選項目的列表。 這是我使用的代碼。
public List<String> getSelectedDeviceList()
{
return list;
}
/**
* Create the frame.
*/
public JLogicDesign(Frame frame, List<String> listDevices) {
super();
setTitle("Device Names");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 331, 316);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
jlistModel = new DefaultListModel();
for(String s: listDevices)
{
jlistModel.addElement(s);
}
final JList jlist = new JList(jlistModel);
jlist.setVisibleRowCount(5);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
btnOk = new JButton("OK");
btnOk.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
list = new ArrayList<String>();
Object[] values = jlist.getSelectedValues();
for(Object o: values)
{
list.add(o.toString());
}
dispose();
}
});
JList已正確填充。 當我嘗試獲取所選項目時,我得到了NPE。
這是我在上一堂課的另一堂課
JLogicDesign jld = new JLogicDesign(f,listOfDevices);
devices = new ArrayList<String>();
devices = jld.getSelectedDeviceList();
提前致謝 !!
您會在此行獲得NPE:
JLogicDesign jld = new JLogicDesign(f,listOfDevices);
devices = new ArrayList<String>();
devices = jld.getSelectedDeviceList(); // NPE here
由於list
中的變量JLogicDesign
時才初始化btnOk
被按下。 因此,在按下此按鈕之前執行了指針,這就是它引發NPE的原因。
為了避免NPE,您應該在JLogicDesign
初始化list
。 但是,它不能解決問題。 您不會得到NPE,但會得到一個空列表。 這是因為JLogicDesign
不是模態的,即使這些語句在事件調度線程上執行, jld.getSelectedDeviceList()
也會在按下btnOk
之前返回list
。
如果在繼續之前需要選定的設備,請考慮使用模式JDialog
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.